【问题标题】:Decimal Regex Constraint Matching (Four digits before optional decimal point and two after)十进制正则表达式约束匹配(可选小数点前四位,小数点后两位)
【发布时间】:2015-07-05 19:59:42
【问题描述】:

每次我输入数字/小数点时,我都需要弄清楚如何让我的正则表达式正确匹配。我想限制小数点前后的位数,这不是太难,但我不知道如何让小数点匹配。

1 - match
12 - match
1234 - match
12345 - wrong
1234. - match
1234.1 - match
1234.12 - match
1234.123 - wrong

Other matched numbers
12.12
1.0
123.99

编辑:

所以我希望小数点前最多 4 个数字,小数点后最多两个。小数位也是可选的。

棘手的部分是,如果第五个字符不是小数点,我希望它失败。

【问题讨论】:

  • 你可以逃脱。带反斜杠:\. 匹配 .
  • 为什么要匹配1234.?你还试过什么?
  • @RakholiyaJenish 因为我将它们视为约束,所以为了让他们输入“1.23”,他们需要先输入“1”。
  • @RakholiyaJenish 另外,如果他们停在 1234。那么当他们离开场地时,我会将场地更正为 1234.00。

标签: regex


【解决方案1】:

您需要更好地指定约束;我假设您希望在点之前最多 4 个,在点之后最多 2 个:

/^\d{1,4}(\.\d{0,2})?$/

编辑:我添加了字符串匹配器的开头和结尾。现在应该可以工作了

【讨论】:

  • 这个答案不起作用,因为当我输入 1234000 时,前四个字符仍然匹配,如果第五个字符不是小数点,我希望它失败。跨度>
  • @JordanHochstetler:已修复
  • 这很好用,我之前没有正确阅读测试编译器。这也是非常可读的。谢谢
  • @RakholiyaJenish 正确。这是更强大(和复杂的正则表达式)或更简单的正则表达式与一些(非常基本的)输入解析之间的权衡。我赞成解析输入,所以每个数字都在一行上。
【解决方案2】:

您可以使用以下正则表达式仅选择那些由数字组成并满足您的条件的单词。

/(?<=^|\s)\d{1,4}(?:\.\d{0,2})?(?=\s|$)/g

前瞻和后瞻用于确保数字周围有空格。

DEMO

Debuggex Demo

【讨论】:

    【解决方案3】:

    这样的事情会有所帮助

    r'^\d{1,4}(\.\d{0,2})?$'
    

    您必须知道,\d 代表一个数字,.对于小数点和 {min_required,max_required}。请务必在使用正则表达式之前对其进行测试here.

    【讨论】:

    • 这个答案不起作用,因为当我输入 12345 时,前四个字符仍然匹配,如果第五个字符不是小数点,我希望它失败。跨度>
    • 语法{,2} 与不同的正则表达式风格不太兼容。请改用{0,2}
    • 你确实复制了我的答案两次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2015-04-21
    • 2021-10-14
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多