仅接受两位整数或浮点数的正则表达式



我正在尝试验证接受 10.99、1.99、1、10、21 等数字的文本字段。

d{0,2}.d{1,2}

上面的表达式只是传递诸如 10.99、11.99、1.99 之类的值,但我想要满足我要求的东西。

试试这个:

^d{1,2}(.d{1,2})?$
  • ^ - 匹配字符串的开头
  • d{1,2} - 必须至少包含 1 位数字,最多 2 位数字
  • (.d{1,2}) - 出现小数点时,必须具有 . 至少 1 位,最多 2 位
  • ? - 可以有 0 到 1 次
  • $ - 匹配字符串的结尾

假设您不想允许像 00 这样的边缘情况,并且希望在点标记后至少有 1 位和最多 2 位小数:

^(?!00)dd?(.dd?)?$

这排除了小数点前的必需数字,即".12"不匹配(您必须输入"0.12",这是最佳实践(。

如果你使用的是String#matches(),你可以删除前导/尾随^$,因为该方法必须匹配整个字符串才能返回true

First \d{0,2} 似乎不符合您的要求,因为在这种情况下,它对任何数字都无效。它将为您提供正确的输出,但从逻辑上讲,这并不意味着要检查字符串中没有数字,因此您可以将其更改为\d{1,2}

现在,在正则表达式中 ? 用于使事物可选,您可以将其与单独的表达式一起使用,如下所示:

d{1,2}.?d{0,2}

或者您可以在组合表达式上使用它,如下所示

d{1,2}(.d{1,2})?

您还可以参考下面的列表进行进一步查询:

abc…    Letters
123…    Digits
d  Any Digit
D  Any Non-digit character
.   Any Character
.  Period
[abc]   Only a, b, or c
[^abc]  Not a, b, nor c
[a-z]   Characters a to z
[0-9]   Numbers 0 to 9
w  Any Alphanumeric character
W  Any Non-alphanumeric character
{m} m Repetitions
{m,n}   m to n Repetitions
*   Zero or more repetitions
+   One or more repetitions
?   Optional character
s  Any Whitespace
S  Any Non-whitespace character
^…$ Starts and ends
(…) Capture Group
(a(bc)) Capture Sub-group
(.*)    Capture all
(abc|def)   Matches abc or def

相关链接 : https://regexone.com/

你能试试用这个吗:

(d{1,2}.d{1,2})|(d{1,2})

这是一个演示,您也可以检查简单的程序


您有两个部分或两个组,一组用于检查浮点数#.#, #.##, ##.##, ##.#,第二组用于检查整数#, ##,因此我们可以使用 or |float|integer

我认为这种类型的模式最好通过更改来处理:

/^s*([-+]?[0-9]*.[0-9]+([eE][-+]?[0-9]+)?)$ #float
|   # or
^(d{1,2})$  # 2 digit int/mx

演示

最新更新