2011-09-05 189 views
1

我试图验证3号,后面/ 5个,然后更多的数字 一串我认为这会工作正则表达式验证

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

,但它不,任何想法,我做错了

+3

你认为'+'字符在做什么? –

回答

1

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

其次,+是“贪婪”,并会匹配尽可能多的字符,所以第一个[0-9]+将一次匹配前3个数字,没有留下任何两个匹配。

第三,不需要使用i,因为您处理的不是大写或小写数字,所以区分大小写是一个有争议的问题。

尝试此代替

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

\d是速记书写[0-9],并且{3}{5}装置分别重复3或5倍。

(此模式固定在开始和字符串的结尾。您的模式才被固定在开始,如果这是有目的的,在从我的模式中删除$

+0

啊,就是我所需要的。谢谢 –

5

试试这个

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

你不工作的原因是由于符合“一个或多个”提名字符或字符类的其中+符号。

此外,使用正斜杠分隔符(在开始和你表达的结束字符)的时候,你需要通过前面加上一个反斜线他们逃脱模式中的任何前瞻性斜线,如

/foo\/bar/ 

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

1

我最近发现本网站对于调试正则表达式有用: 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并发现它仍然匹配。然后你通过并删除所有加号,然后正确停止匹配。

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