使用正则表达式匹配分隔符

时间:2012-03-08 20:03:09

标签: regex

我遇到需要验证社会安全号码的情况,可以使用以下三种格式输入:

123-45-6789 123/45/6789 123456789

我尝试编写一个正则表达式来匹配这些,并提出了这个:

^[0-9]{3}(-|/)?[0-9]{2}(-|/)?[0-9]{4}$

是接近的,但它仍然允许像123-45/6789这样的字符串,我想阻止它。是否有任何方法可以匹配分隔符,以便允许所有超时,并允许所有正斜杠,但不是两者的组合?

2 个答案:

答案 0 :(得分:4)

这应该有效:

^[0-9]{3}([-|/]?)[0-9]{2}\1[0-9]{4}$

\1是对子模式([-|/]?)的反向引用,因此它匹配为第一个分隔符找到的任何内容。

答案 1 :(得分:4)

最好使用这个正则表达式:

/^\d{3}(\/|-|)\d{2}\1\d{4}$/

这与123-45/6789123-456789不符,但是 将匹配123-45-6789123/45/6789123456789