我需要一个仅允许整数或四分之一小数的正则表达式。
到目前为止,我已经知道了,但是此代码/[^.]+\.25|[^.]+\.50|[^.]+\.75|[^.]+\.00/
强制用户键入带小数的数字。我正在寻找更灵活的东西。
有效
0
0.
.25
.5
.75
3
1.
1.00 5.0 4.25 8.50 8.75
无效
1.2
.3
.
empty space
答案 0 :(得分:2)
您可以使用alternation来匹配一个可选数字,后跟一个四分之一小数点的小数点,或者匹配一个或多个数字,后跟一个可选点。
^(?:\d*\.(?:[27]5|50?|00?)|\d+\.?)$
说明
(?:
非捕获组
\d*\.
匹配零个或多个数字后跟一个点(?:[27]5|50?|00?)
与25、75、50、5、0或00匹配的非捕获组|
或\d+\.?
匹配一个或多个数字,然后匹配一个可选的点)
关闭非捕获组$
声明字符串的结尾答案 1 :(得分:0)
这是一种方法:
/\A (?= \.? [0-9] ) [0-9]* (?: \. (?: [05]0? | [27]5 )? )? \z/x
或附有评论:
/
\A # beginning of string
(?= # look-ahead
\.? # a dot (optional)
[0-9] # a digit
)
# ^ this part ensures that there is at least one digit in the string.
# in the following regex all parts are optional.
[0-9]* # the integer part: 0 or more digits
(?: # a group: the decimal part
\. # a dot
(?: # another group for digits after the decimal point
[05]0? # match 0 or 5, optionally followed by 0 (0, 00, 5, 50)
|
[27]5 # ... or 2 or 7, followed by 5 (25, 75)
)? # this part is optional
)? # ... actually, the whole decimal part is optional
\z # end of string
/x
这有点棘手,因为数字的所有部分在某种程度上都是可选的:
.25
有效,因此整数部分是可选的0
有效,因此小数点和后面的数字是可选的0.
有效,因此十进制数字是可选的主正则表达式的编写方式使所有部分都是可选的,但是在它之前有一个前瞻性断言,以确保整个字符串不为空或仅为.
。