正则表达式验证

时间:2011-09-05 01:13:11

标签: php regex

我正在尝试验证一个包含3个数字的字符串,然后是/然后再增加5个数字 我以为这会起作用

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

但它没有,任何想法我做错了

3 个答案:

答案 0 :(得分:5)

试试这个

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

您的工作不起作用的原因是+符号与指定字符或字符类中的“一个或多个”匹配。

此外,当使用正斜杠分隔符(表达式的开头和结尾处的字符)时,您需要通过在前缀中添加反斜杠来转义模式中的任何正斜杠,例如

/foo\/bar/

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

答案 1 :(得分:1)

首先,您使用/作为正则表达式分隔符,因此您无法在模式中使用它而不使用反斜杠转义它。否则,PHP会认为你的模式在中间的/结束(你可以看到,即使是StackOverflow的语法高亮也是如此)。

其次,+是“贪婪的”,并且会匹配尽可能多的字符,因此第一个[0-9]+将匹配前一个3个数字,不会留下接下来的两个匹配。

第三,没有必要使用i,因为你处理的数字不是大写或小写的,所以区分大小写是一个没有实际意义的点。

试试这个

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

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

(此模式锚定在字符串的开头和结尾。您的模式仅锚定到开头,如果这是故意的,则从我的模式中删除$

答案 2 :(得分:1)

我最近发现这个网站对调试regex有用:   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并发现它仍匹配。然后你通过并删除所有加号然后它正确地停止匹配。

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