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

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

我用这个正则表达式,

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

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


当前回答

我使用了@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

其他回答

一个很简单的方法:

"9001234567".match(/^\d{10}$/g)

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

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

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

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

(123) 456-7890 +(123) 456-7890 + (123) 456-7890 +(123) -456-7890 +(123) -456-78-90 The 123-456-7890 123.456.7890 1234567890 + 31636363634 075-63546725

这是一个非常松散的选项,我更喜欢保持这种方式,大多数情况下,我在注册表单中使用它,用户需要添加他们的电话号码。 通常用户对强制执行严格格式规则的表单有麻烦,我更喜欢用户在显示或保存到数据库之前填写数字和格式。 http://regexr.com/3c53v

每个人的答案都很棒,但我认为这里有一个更全面的答案……

这是为javascript匹配使用一个单一的数字在单行:

^(?!.*911.*\d{4})((\+?1[\/ ]?)?(?![\(\. -]?555.*)\( ?[2-9][0-9]{2} ?\) ?|(\+?1[\.\/ -])?[2-9][0-9]{2}[\.\/ -]?)(?!555.?01..)([2-9][0-9]{2})[\.\/ -]?([0-9]{4})$

如果您想在单词边界上匹配,只需将^和$更改为\b

我欢迎对这个解决方案提出任何建议、纠正或批评。据我所知,这与NANP格式(对于美国数字-我在创建此时没有验证其他北美国家)匹配,避免任何911错误(不能在区号或地区代码中),仅消除那些实际上无效的555数字(555的地区代码后面是01xx,其中x =任何数字)。

除了数字,什么都不用管。

以下是我使用的方法:

// USA phones should contain at least 10 digits. For Ukrainian phones it's OK to have only 9 digits, without leading 0 and country code prefix: [+380] 88 888-88-88.
String.prototype.isValidPhone = function(digitsCount) {
  var str = this.trim().match(/\d/g);
  return str && str.length >= (digitsCount || 10); // default is at least 10 digits
}