字符串不应该包含SSN或电话号码。 正则表达式如下不起作用,只接受XXXXXXXXX格式。
不应包含xxx-xx-xxxx
或xxx-xxx-xxx
或xxxxxxxxx
。
regex = "^((?!\\d[9]$)|(?!(\\d{3}-?\\d{2}-?\\d{4}$)|(?!(\\d{3}-?\\d{3}-?\\d{3})$)$";
字符串不应该包含SSN或电话号码。 正则表达式如下不起作用,只接受XXXXXXXXX格式。
不应包含xxx-xx-xxxx
或xxx-xxx-xxx
或xxxxxxxxx
。
regex = "^((?!\\d[9]$)|(?!(\\d{3}-?\\d{2}-?\\d{4}$)|(?!(\\d{3}-?\\d{3}-?\\d{3})$)$";
您可以试试:
^(?!((\\d{9})|(\\d{3}-\\d{2}-\\d{4})|(\\d{3}-\\d{3}-\\d{3}))$).*
为了解释,如果我们看到你所提供的查询:
^((?!\\d[9]$)|(?!(\\d{3}-?\\d{2}-?\\d{4}$)|(?!(\\d{3}-?\\d{3}-?\\d{3})$)$
我们可以读到: is not followed by xxxxxxxxx OR is not followed by xxx-xx-xxxx OR is not followed by xxx-xxx-xxx
(我的版本在上面,我转述这是: is not (xxxxxxxxx OR xxx-xx-xxxx OR xxx-xxx-xxx)
。)。
世界上任何一个字符串是保证不匹配的至少两种的,所以他们的组合始终是真实的,让你以更简单有效的正则表达式:
^$
?!
是一个零宽度断言,因此它消耗什么。 即使你符合什么由向前看符号检查,你不消耗输入,所以你永远无法达到$,这是需要向前看符号之外。 简单地增加一个.*
前的最后$
修复。
你连字符不应该跟着?,我不认为。 使他们可选的,意味着你也匹配xxx-xxxxxx
和xxx-xx-x-xxx
。 如果一种旨在你也可以添加对方,或大大简化您正则表达式,到:
^(?!\\d{3}-?\\d{2}-?\\d-?\\d{3}$).*
另一个问题是\\d[9]$
应\\d{9}$