Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 - Fatal编程技术网

Regex 正则表达式验证数字范围

Regex 正则表达式验证数字范围,regex,Regex,我需要使用正则表达式验证字符串输入,规则如下: 字符串的数字不应小于2且不应大于9999(2-9999) 字符串在数字之前不应包含零(例如:编号0002、0022、0222) 我真的需要通过正则表达式来实现这一点,所以任何其他解决方案都是不可接受的 试试这个 ^(?!0|1$)\d{1,4}$ 说明: ^\d{1,4}$:匹配0-9999 (?!0).:在数字之前没有零(例如:编号0002002222) (?!1$)…:数字不能小于2(=1) (?!…):负前瞻 \d:0到9之间的一位数

我需要使用正则表达式验证字符串输入,规则如下:

  • 字符串的数字不应小于2且不应大于9999(2-9999)
  • 字符串在数字之前不应包含零(例如:编号0002、0022、0222)
我真的需要通过正则表达式来实现这一点,所以任何其他解决方案都是不可接受的

试试这个

^(?!0|1$)\d{1,4}$

说明:
^\d{1,4}$
:匹配0-9999
(?!0).
:在数字之前没有零(例如:编号0002002222)
(?!1$)…
:数字不能小于2(=1)
(?!…)
:负前瞻
\d
:0到9之间的一位数字
^
:根据多行模式,字符串的开头或行的开头
$
:取决于多行模式的字符串结束或行结束

尝试以下操作:

/^[2-9]|[1-9][0-9]{1,3}$/

要实现您的第一个条件:

  • 字符串的数字不应小于2且不应大于9999(2-9999)
有两种情况:

  • 单个数字:
    [2-9]
    这是一个介于2和9之间的单个字符
  • 多位:
    [1-9][0-9]{1,3}
    这是一个二三四位数字,所有数字都在
    1
    9
    范围内
  • 注1:
    {1,3}
    将第二个字符类限制为只接受一个或两个或三个数字

    注2:
    ^
    表示字符串的开始,
    $
    表示字符串的结束


    顺便说一下,您的第二个条件根本没有在上面的模式中定义。(我的意思是它不匹配任何以
    0
    开头的数字,所以都可以。)

    (1)为什么是regex?这不是最简单的方法。(2) 你试过什么吗?你好像把我们误认为是正则表达式写作服务。你自己做了什么努力?如果你真的需要用正则表达式来实现这一点,我想你至少可以努力做到。@EdCottrell你的第一个问题似乎很奇怪(为什么用正则表达式)。。没有regex他怎么能做到?你有更好的选择吗?@Shafizadeh通常,最好将字符串转换或解析为数字数据,然后直接处理数字。试图在文本数据中找到特定范围内的数字比简单地提取数字并将其与边界数字进行比较要困难得多。有时这是不可避免的,但OP没有明确说明他的限制。如果没有更多信息,这听起来像是的一个例子。谢谢……它工作得很好:)@GoR不客气。@KenWhite是的,你是对的。大多数答案至少需要一个简短的解释。但在这种情况下,我的解决方案的解释是上面问题中的两个条件。不,因为在那篇文章的答案中的原因,最具体的是因为你不应该建议海报尝试任何东西。你应该发布一个答案,而不是让海报尝试,因为你应该教育未来的读者。你也做了一个出色的工作,教这张海报(以及未来的其他人),plz给我TehCodez问题是可以接受的,它消除了所有的激励,首先努力自己,鼓励未来的人回答,而不必费心解释他们的答案。荣誉