我正在尝试验证接受 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
演示