正则表达式用于整数或四分之一小数

时间:2018-08-10 18:29:30

标签: regex validation

我需要一个仅允许整数或四分之一小数的正则表达式。

到目前为止,我已经知道了,但是此代码/[^.]+\.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

2 个答案:

答案 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.有效,因此十进制数字是可选的

主正则表达式的编写方式使所有部分都是可选的,但是在它之前有一个前瞻性断言,以确保整个字符串不为空或仅为.