首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将SSN与RegEx进行匹配

将SSN与RegEx进行匹配
EN

Stack Overflow用户
提问于 2013-04-19 00:04:03
回答 1查看 232关注 0票数 0

我正在为一个项目过滤SSN#。产品的SSN默认表达式为

代码语言:javascript
运行
复制
(^|\b)(?!9|8|77[3-9]|666|000)(\d{3})( - | |-)(?!00)(\d{2})\3(?!0000)(\d{4})(\b|$)

在过去,他们使用regex表达式对自定义脚本进行了修改:

代码语言:javascript
运行
复制
(^|\b)(?!9|8|77[3-9]|666|000)(\d{3})( - | |-)(?!00)(\d{2})\3(?!0000)(\d{4})($|[^\d-])

这两个表达式之间的区别是

代码语言:javascript
运行
复制
(\b|$)
\b: backspace
$:end of string

代码语言:javascript
运行
复制
($|[^\d-])
$:end of string
[^]: Not in position
\d-: not match 0-9

我想这对我来说没有任何意义。为什么要做这样的改变?这两个表达式的结尾似乎都是多余的。任何帮助都将不胜感激。谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2013-04-19 00:24:31

这里的区别是:

代码语言:javascript
运行
复制
(\b|$)

vs

代码语言:javascript
运行
复制
($|[^\d-])

\b仅表示字符类中的退格符,如[\babc]将匹配'a‘、'b’、'c‘或退格符。在字符类之外,它是一个分词符,例如字母和空格之间的。

以前,正则表达式可以接受SSN,匹配到这一点的模式,以字符串结尾($)或任何断字符(\b)结束。因此它将匹配"111-22-3333“或"111-22-3333垃圾数据”中的SSN

在更改之后,它通常对SSN后面的内容更加宽松。它可以以字符串结尾($)或除数字或连字符([^\d-])以外的任何字符结尾。因此,除了上面匹配的内容之外,它还将匹配“111-22-3333垃圾”或"111-22-3333#6789“中的SSN,但不匹配"111-22-33333”或"111-22-3333-123“中的SSN

坦率地说,在我看来,您列出的旧版本在大多数情况下似乎更正确,但这当然取决于您的应用程序的需求。

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

https://stackoverflow.com/questions/16087852

复制
相关文章

相似问题

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