我试图验证3号,后面/ 5个,然后更多的数字 一串我认为这会工作正则表达式验证
(/^([0-9]+[0-9]+[0-9]+/[0-9]+[0-9]+[0-9]+[0-9]+[0-9])/i)
,但它不,任何想法,我做错了
我试图验证3号,后面/ 5个,然后更多的数字 一串我认为这会工作正则表达式验证
(/^([0-9]+[0-9]+[0-9]+/[0-9]+[0-9]+[0-9]+[0-9]+[0-9])/i)
,但它不,任何想法,我做错了
首先,您使用/
作为正则表达式分隔符,因此您不能在模式中使用它,而不使用反斜杠进行转义。否则,PHP会认为你的模式在中间的/
处结束(你可以看到即使StackOverflow的语法高亮显示也是这样认为的)。
其次,+
是“贪婪”,并会匹配尽可能多的字符,所以第一个[0-9]+
将一次匹配前3个数字,没有留下任何两个匹配。
第三,不需要使用i
,因为您处理的不是大写或小写数字,所以区分大小写是一个有争议的问题。
尝试此代替
/^\d{3}\/\d{5}$/
的\d
是速记书写[0-9]
,并且{3}
和{5}
装置分别重复3或5倍。
(此模式固定在开始和字符串的结尾。您的模式才被固定在开始,如果这是有目的的,在从我的模式中删除$
)
啊,就是我所需要的。谢谢 –
试试这个
preg_match('@^\d{3}/\d{5}@', $string)
你不工作的原因是由于符合“一个或多个”提名字符或字符类的其中+
符号。
此外,使用正斜杠分隔符(在开始和你表达的结束字符)的时候,你需要通过前面加上一个反斜线他们逃脱模式中的任何前瞻性斜线,如
/foo\/bar/
PHP允许您使用备用分隔符(如我的答案中所述),如果您的表达式包含许多前斜杠,则这很方便。
我最近发现本网站对于调试正则表达式有用: 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
并发现它仍然匹配。然后你通过并删除所有加号,然后正确停止匹配。
我特别喜欢这个特定的网站,它显示红色部分匹配的方式,让你看到你的正则表达式在哪里工作。
你认为'+'字符在做什么? –