Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于整数或带四分之一小数的数字的正则表达式_Regex_Validation - Fatal编程技术网

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。