我在一些网站上找到了这个代码,它工作得很完美。它验证电话号码是以下格式之一: (123) 456-7890或123-456-7890

问题是我的客户端(我不知道为什么,可能是客户端)想要添加另一种格式,连续的十个数字,像这样:1234567890。

我用这个正则表达式,

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

我如何添加它也验证另一种格式?我不擅长使用正则表达式。


当前回答

这是可行的:

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/

的吗?字符表示前一组匹配0次或1次。组(-|\s)将匹配-或|字符。添加?在正则表达式中第二次出现此组后,允许您匹配10个连续数字的序列。

其他回答

下面的REGEX将验证这些格式中的任何一个:

(123) 456-7890 The 123-456-7890 123.456.7890 1234567890

/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/

我建议使用一些更清晰的东西(特别是考虑到谁必须维护代码)……是什么:

var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
               formats
                 .replace(/([\(\)])/g, "\\$1")
                 .replace(/9/g,"\\d") +
               ")$");

regexp是从一个清晰的模板构建的?添加一个新的将是一个无需动脑,甚至可能是客户自己可以做到这一点,在“选项”页面。

我使用了@marty提供的一个,并对它进行了一些修改,以适应更多的情况:

/^[\+]?([0-9][\s]?|[0-9]?)([(][0-9]{3}[)][\s]?|[0-9]{3}[-\s\.]?)[0-9]{3}[-\s\.]?[0-9]{4,6}$/im

有效的格式:

+1 123 4567890 + 11234567890 + 1 (123)4567890 + 1 (123)456-7890 +1 (123) 456-7890 +1 (123)456 7890 +1 123 456-7890 +1 123 456 7890 +1 123-456-7890 The 123-456-7890 123 456-7890 123 456 7890 123 4567890 1234567890

简单的正则表达式:/ \ b \ d {3} [-] ? \ d{3}[-]吗?\ d {4} \ b / g

看看这个格式,希望它有用: 444-555-1234 f: 246.555.8888 m: 1235554567

- ^ (() \ d {3} (?) (s - | \) ? d {3} (- | \ s) ?\ d{4} -美元

的吗?字符表示前一组匹配0次或1次。组(-|\s)将匹配-或|字符。