允许在第一个 0 之后使用实时输入验证正则表达式显示更多数字

Allow more digit after the first 0 with live input validation regex

提问人:nuhkoca 提问时间:11/3/2023 最后编辑:Wiktor Stribiżewnuhkoca 更新时间:11/3/2023 访问量:98

问:

我有一个正则表达式,可以在我这边进行一些验证。是的

^(?![.,])-?[1-9]*?0?[,.]?([,.]\d+)?$

这个正则表达式基本上验证了一个数字

  • 如果它以 0 开头,则后面必须跟一个逗号或点
    • 有效 => 0.120,456
    • 无效 => 012.90
  • 一行不能有多个点或逗号,例如 12..45
  • 只能是一个数字、一个逗号或一个点,例如 123、123.45 或 123,45
  • 不能以点或逗号开头和结尾

这个正则表达式非常适合上述几点,但我被困在一种情况下,即我不能输入像 100 或 101 这样的数字,因为它仍然需要我一个点或逗号,因为正则表达式仍然将任何零视为第一规则。我该如何解决?

正则表达式 数字

评论

0赞 user3783243 11/3/2023
你能改写吗?您能否提供 5 或 10 个示例来说明什么是有效的/无效的?单独有效吗?can only a digit or a comma or dot0
0赞 nuhkoca 11/3/2023
@user3783243输入只能由数字、点或逗号组成,我的意思是例如 100.45 或 50,66 或 12345
2赞 Barmar 11/3/2023
@JorgeCampos 该正则表达式允许前导零,除非它是小数点之前的唯一数字,否则这里不允许使用前导零。
1赞 Wiktor Stribiżew 11/3/2023
您的正则表达式是在考虑实时输入验证的情况下编写的,如果它为 true,您实际上无法检查“不能以点或逗号开始和结束”条件,因为您将无法输入逗号/点。模式将是你会考虑的东西。^(?:0(?:[,.]\d*)?|[1-9]\d*(?:[,.]\d*)?)$
1赞 nuhkoca 11/3/2023
@JorgeCampos其实是56岁。对我来说是一个有效的案例,因为正如 Wiktor 提到的,这是对实时打字的检查:)顺便说一句,这就像一个魅力,非常感谢!您介意将其作为答案发布,以便我可以标记为已解决吗?

答:

1赞 Wiktor Stribiżew 11/3/2023 #1

你可以使用

^(?:0|[1-9]\d*)(?:[.,]\d*)?$

请参阅正则表达式演示

细节

  • ^- 字符串的开头
  • (?:0|[1-9]\d*)-也
    • 0-零
    • |-或
    • [1-9]\d*- 1 到 9 位数字,然后是任何零位或更多位数字
  • (?:[.,]\d*)?- 逗号或点的可选序列,然后是零位或多位数字。
  • $- 字符串的结尾。