Regex 用于整数或带四分之一小数的数字的正则表达式
我需要一个只允许整数或四分之一小数的正则表达式 到目前为止,我有这个,但是这个代码Regex 用于整数或带四分之一小数的数字的正则表达式,regex,validation,Regex,Validation,我需要一个只允许整数或四分之一小数的正则表达式 到目前为止,我有这个,但是这个代码/[^.]+\.25.[^.]+\.50.[^.]+\.75.[^.]+\.00/强制用户键入带小数的数字。我在找更灵活的 有效的 1.00 5 4.25 8.50 8.75 无效的 1.2 .3 . empty space 这里有一个方法: /\A (?= \.? [0-9] ) [0-9]* (?: \. (?: [05]0? | [27]5 )? )? \z/x 或附评论: / \A # begin
/[^.]+\.25.[^.]+\.50.[^.]+\.75.[^.]+\.00/
强制用户键入带小数的数字。我在找更灵活的
有效的
1.00
5
4.25
8.50
8.75
无效的
1.2
.3
.
empty space
这里有一个方法:
/\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。
这里有一种方法:
/\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。
有效,因此十进制数字是可选的
主正则表达式的编写方式使所有部分都是可选的,但它前面有一个前瞻性断言,以确保整个字符串不是空的,或者只是
您可以使用匹配一个可选数字后跟一个点四分之一小数部分,或者匹配一个或多个数字后跟一个可选点
解释
(?:
非捕获组
\d*\。
将数字后跟一个点进行零次或多次匹配
(?:[27]5 | 50 | 00?
匹配25、75、50、5、0或00的非捕获组
|
或
\d+\.?
匹配一个或多个数字,后跟一个可选点
)
关闭非捕获组
$
断言字符串的结尾
您可以使用来匹配可选数字后跟四分之一小数部分的点,或者匹配一个或多个数字后跟可选点
解释
(?:
非捕获组
\d*\。
将数字后跟一个点进行零次或多次匹配
(?:[27]5 | 50 | 00?
匹配25、75、50、5、0或00的非捕获组
|
或
\d+\.?
匹配一个或多个数字,后跟一个可选点
)
关闭非捕获组
$
断言字符串的结尾
试试^(?!\.?$)\d*\?(?:[27]5?5?0?)$
。请看这里的实时演示@revo不匹配1.00
@melpomene我在示例中没有看到它,或者没有明确的规则,我不应该从OP中读取正则表达式并找到规则。但是如果是这样的话,只需要添加一个字符类^(?!\.?$)\d*\?(?:[27]5[50]0?$)
。melpomene你是对的,我没有说明1.00是有效的。感谢您的努力,revo和melpomene。请尝试^(?!\.?$)\d*\?(?:[27]5?5?0?$
。请看这里的实时演示@revo不匹配1.00
@melpomene我在示例中没有看到它,或者没有明确的规则,我不应该从OP中读取正则表达式并找到规则。但是如果是这样的话,只需要添加一个字符类^(?!\.?$)\d*\?(?:[27]5[50]0?$)
。melpomene你是对的,我没有说明1.00是有效的。感谢您的努力,revo和melpomene。