首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式验证

正则表达式验证
EN

Stack Overflow用户
提问于 2011-09-05 09:13:11
回答 3查看 107关注 0票数 1

我正在尝试验证一个由3个数字后跟/然后5个数字组成的字符串,我认为这会起作用

代码语言:javascript
复制
(/^([0-9]+[0-9]+[0-9]+/[0-9]+[0-9]+[0-9]+[0-9]+[0-9])/i)

但它不是,你知道我做错了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-05 09:16:43

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

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

第三,没有必要使用i,因为您要处理的数字既不是大写也不是小写,所以区分大小写是一个没有意义的问题。

试试这个吧

代码语言:javascript
复制
/^\d{3}\/\d{5}$/

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

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

票数 1
EN

Stack Overflow用户

发布于 2011-09-05 09:15:58

尝尝这个

代码语言:javascript
复制
preg_match('@^\d{3}/\d{5}@', $string)

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

此外,在使用正斜杠分隔符(表达式的开头和结尾处的字符)时,需要在模式中的任何正斜杠前加上反斜杠进行转义,例如

代码语言:javascript
复制
/foo\/bar/

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

票数 5
EN

Stack Overflow用户

发布于 2011-09-05 09:37:08

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

我特别喜欢这个特定站点的一点是它以红色显示部分匹配的方式,允许您查看您的正则表达式正在运行的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7303145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档