我遇到需要验证社会安全号码的情况,可以使用以下三种格式输入:
123-45-6789 123/45/6789 123456789
我尝试编写一个正则表达式来匹配这些,并提出了这个:
^[0-9]{3}(-|/)?[0-9]{2}(-|/)?[0-9]{4}$
是接近的,但它仍然允许像123-45/6789
这样的字符串,我想阻止它。是否有任何方法可以匹配分隔符,以便允许所有超时,并允许所有正斜杠,但不是两者的组合?
答案 0 :(得分:4)
这应该有效:
^[0-9]{3}([-|/]?)[0-9]{2}\1[0-9]{4}$
\1
是对子模式([-|/]?)
的反向引用,因此它匹配为第一个分隔符找到的任何内容。
答案 1 :(得分:4)
最好使用这个正则表达式:
/^\d{3}(\/|-|)\d{2}\1\d{4}$/
这与123-45/6789
和123-456789
不符,但是
将匹配123-45-6789
或123/45/6789
或123456789