正则表达式验证


regex validation

我试图验证3个数字后面跟着/然后5个数字的字符串我认为这将工作

(/^([0-9]+[0-9]+[0-9]+/[0-9]+[0-9]+[0-9]+[0-9]+[0-9])/i)

但是它不知道我做错了什么

试试这个

preg_match('@^'d{3}/'d{5}@', $string)

不工作的原因是由于+符号匹配指定字符或字符类的"一个或多个"。

另外,当使用正斜杠分隔符(表达式开头和结尾的字符)时,需要用反斜杠作为前缀来转义模式中的正斜杠,例如

/foo'/bar/

PHP允许您使用替代分隔符(如我的答案),如果您的表达式包含许多正斜杠,这很方便。

首先,您使用/作为regexp分隔符,因此如果不使用反斜杠进行转义,就不能在模式中使用它。否则,PHP会认为你的模式在中间的/处结束(你可以看到,即使是StackOverflow的语法高亮也会这样认为)。

第二,+是"贪婪的",它会匹配尽可能多的字符,所以第一个[0-9]+会一次匹配前3个数字,不给后面两个数字留下任何匹配。

第三,没有必要使用i,因为你正在处理的数字不是大写或小写,所以大小写敏感是一个没有意义的问题。

试试这个

/^'d{3}'/'d{5}$/

'd[0-9]的简写,{3}{5}分别表示重复3次或5次。

(此模式固定在字符串的开始和结束。你的模式只锚定在开始,如果这是故意的,从我的模式中删除$)

我最近发现这个网站对调试正则表达式很有用:http://www.regextester.com/index2.html

它假设使用/.../(这意味着您不应该在粘贴的正则表达式中包含这些斜杠)。

所以,在我把你的正则表达式^([0-9]+[0-9]+[0-9]+/[0-9]+[0-9]+[0-9]+[0-9]+[0-9])在正则表达式框和123/45678在测试框中,我看到没有匹配。当我在中间的正斜杠前面放一个反斜杠时,它就能识别出匹配。然后您可以尝试匹配1234/567890并发现它仍然匹配。然后您遍历并删除所有加号,然后它就会正确地停止匹配。

我特别喜欢这个网站的地方是它用红色显示部分匹配的方式,让您可以看到您的正则表达式在哪里工作。