很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,访问帮助中心 /help/reopen-questions 。
该字符串不应包含 SSN 或电话号码。下面的正则表达式不起作用,它只接受 xxxxxxxxx 格式。
不应包含xxx-xx-xxxx
or xxx-xxx-xxx
or 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
and xxx-xx-x-xxx
。如果这是有意的,您可以将它们添加回来,或者大大简化您的正则表达式,以:
^(?!\\d{3}-?\\d{2}-?\\d-?\\d{3}$).*
另一个问题是\\d[9]$
应该\\d{9}$
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)