使用JavaScript验证电话号码

Cas*_*Roy 128 javascript regex

我在一些网站上发现了这个代码,它完美无缺.它验证电话号码是以下格式之一:
(123)456-7890123-456-7890

问题是我的客户端(我不知道为什么,也许客户端的东西)想要添加另一种格式,连续十个数字,如下所示:1234567890.

我正在使用这个正则表达式,

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Run Code Online (Sandbox Code Playgroud)

如何添加它还验证另一种格式?我对正则表达式不太满意.

小智 124

我选择的正则表达式是:

/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
Run Code Online (Sandbox Code Playgroud)

有效格式:

(123)456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
31636363634
075-63546725

  • 为什么你需要对数字不区分大小写? (38认同)
  • @SarinSuriyakoon`i'使表达式不区分大小写,`m执行多行搜索 (6认同)
  • 什么是/我?在谷歌上找不到解释:) (3认同)
  • @darioxlz“123456789”不是电话号码的有效长度 (2认同)

jos*_*736 110

首先,您的格式验证器显然仅适用于NANP(国家代码+1)号码.您的申请是否会被来自北美以外的电话号码的人使用?如果是这样,您不希望阻止这些人输入完全有效的[国际]号码.

其次,您的验证不正确.NANP号的格式NXX NXX XXXX,其中N是一个数字2-9和X一个0-9的数字.此外,区域代码和交换可能不采取形式N11(以两个结尾)以避免与特殊服务混淆,除非非地理区域代码(800,888,877,866,855,900)中的数字可能具有N11交换.

因此,即使这不是有效的电话号码,您的正则表达式也会传递数字(123)123 4566.您可以通过更换修复\d{3}[2-9]{1}\d{2}.

最后,我感觉你在网络浏览器中验证用户输入.请记住,客户端验证只是您为用户提供的便利 ; 您仍然需要在服务器上验证所有输入(再次).

TL; DR不使用正则表达式来验证复杂的真实数据,如电话号码URL.使用专门的库.


ken*_*bec 58

如果您正在寻找10位且只有10位数字,请忽略除数字之外的所有内容 -

   return value.match(/\d/g).length===10;
Run Code Online (Sandbox Code Playgroud)

  • 你的意思是匹配(/\d/g)不匹配(/\d /)或长度将是1,而不是10; 另外,空字符串上的匹配为空.它至少应该是var m = value.match(/\d/g); return m && m.length === 10 (7认同)

Pau*_*ber 30

我要做的是忽略格式并验证数字内容:

var originalPhoneNumber = "415-555-1212";

function isValid(p) {
  var phoneRe = /^[2-9]\d{2}[2-9]\d{2}\d{4}$/;
  var digits = p.replace(/\D/g, "");
  return phoneRe.test(digits);
}
Run Code Online (Sandbox Code Playgroud)


Bil*_*bad 29

以下REGEX将验证以下任何格式:

(123)456-7890
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}$/
Run Code Online (Sandbox Code Playgroud)

  • 你需要逃避`.`,否则它将匹配任意字符,打破你的正则表达式. (3认同)
  • 这引导我走向正确的方向。谢谢!不幸的是,这个表达式也将匹配 (1234567890 和 123)4567890。^((\([0-9]{3}\))|([0-9]{3}))[-\s\.]?[0-9]{3}[-\s\. ]?[0-9]{4}$ 解决了这个小问题。 (2认同)

eli*_*has 27

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

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

这是一个非常宽松的选项,我更喜欢这样保留,主要是我在注册表单中使用它,用户需要添加他们的电话号码.通常用户在执行严格格式规则的表单时遇到问题,我更喜欢用户在将其保存到数据库之前填写显示中的数字和格式. http://regexr.com/3c53v

  • 正则表达式稍加修改,允许例如`+41(79)123 45 67`(瑞士):`/ ^ [+]?[]/0-9]*[({] [0-9] {1, 4})] + [ - \s./0-9]*$/g` (3认同)
  • 最好加上字数限制。将最后一个 *(星号)更改为 [8, 14]:`/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\ s\./0-9]{8,14}$/g` (3认同)

650*_*502 14

我建议使用更清楚的东西(尤其是想要谁将不得不维护代码)......那么:

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

正则表达式是从一个清晰的模板构建的?添加一个新的将是一个明智的,甚至客户本身也可以在"选项"页面中这样做.


Fra*_*wel 13

其中str可以是以下任何形式:555​​-555-5555 (555)555-5555(555)555-5555 555 555 5555 5555555555 1 555 555 5555

function telephoneCheck(str) {
  var isphone = /^(1\s|1|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/.test(str);
  alert(isphone);
}
telephoneCheck("1 555 555 5555");
Run Code Online (Sandbox Code Playgroud)


Tia*_*gel 10


正则表达式

使用以下正则表达式模式:

/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
Run Code Online (Sandbox Code Playgroud)

像这样:<input pattern="/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im">*


有效格式:

(123) 456-7890、
(123)
456-7890、123-456-7890、123.456.7890、1234567890
、 +
31636363634

075-63546725



Ива*_*нко 8

尝试这个

/^(\+{0,})(\d{0,})([(]{1}\d{1,3}[)]{0,}){0,}(\s?\d+ |\+\d{2,3}\s{1}\d+|\d+){1}[\s|-]?\d+([\s|-]?\d+){1,2}( \s){0,}$/克

有效格式

  • (123)456-7890
  • (123)456-7890
  • 123-456-7890
  • 1234567890
  • +31636363634
  • +3(123) 123-12-12
  • +3(123)123-12-12
  • +3(123)1231212
  • +3(123) 12312123
  • +3(123) 123 12 12
  • 075-63546725
  • +7910 120 54 54
  • 910 120 54 54
  • 8 999 999 99 99

https://regex101.com/r/QXAhGV/1


小智 7

/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/

虽然这个帖子很旧但想留下我的贡献。这些是被接受的: 5555555555 555-555-5555 (555)555-5555 1(555)555-5555 1 555 555 5555 1 555-555-5555 1 (555) 555

这些不被接受:

555-5555 -> 接受此用途: ^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$

5555555 -> 接受此用途: ^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$

1 555)555-5555 123**&!!asdf# 55555555 (6505552368) 2 (757) 622-7382 0 (757) 622-7382 -1 (757) 622-7382 (6505552368) 2 7) 27 -7382 27576227382 (275)76227382 2(757)6227382 2(757)622-7382 (555)5(55?)-5555

这是我使用的代码:

function telephoneCheck(str) {
  var patt = new RegExp(/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/);
  return patt.test(str);
}

telephoneCheck("+1 555-555-5555");
Run Code Online (Sandbox Code Playgroud)


Nik*_*hov 7

一个其实很简单的方法:

"9001234567".match(/^\d{10}$/g)
Run Code Online (Sandbox Code Playgroud)


小智 6

试试这个 - 它也包括对国际格式的验证.

/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g

此正则表达式验证以下格式:

  • (541)754-3010国内
  • + 1-541-754-3010国际
  • 1-541-754-3010在美国拨打
  • 001-541-754-3010来自德国
  • 191 541 754 3010从法国拨打


Don*_*nut 5

这将起作用:

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
Run Code Online (Sandbox Code Playgroud)

?字符表示前一组应匹配零或一次。该组(-|\s)将匹配一个-或一个|字符。?在您的正则表达式中第二次出现该组之后添加,可以匹配10个连续数字的序列。