Javascript Regex -使用什么来验证电话号码?

rqcrx0a6  于 2023-02-02  发布在  Java
关注(0)|答案(9)|浏览(156)

谁能告诉我RegEx将如何验证国际电话号码,包括数字之间的空格,并允许这些字符:- ( ).
字符串中数字的数量并不重要,我只是希望用户能够键入类似示例1或2的内容,如果他们愿意的话:
示例:

  1. +44 (0) 207 111 1111
  2. 442071111111
    我已经通读并测试了一些类似问题的答案,以我的理解,但到目前为止,没有一个是为我工作的方式,我希望他们。
    请有人能帮我一个明确的解释,上面应该如何写的验证?
    非常感谢任何能提供帮助的人。
kx1ctssn

kx1ctssn1#

试试这个代码

HTML代码

<input type="text" id="phone"/>

JS代码

$("#phone").blur(function() {
  var regexp = /^[\s()+-]*([0-9][\s()+-]*){6,20}$/
  var no = $("#phone").val();
  if (!regexp.test(no) && no.length < 0) {
    alert("Wrong phone no");
  }
});
vh0rcniy

vh0rcniy2#

参见A comprehensive regex for phone number validation

快速备忘单

  • 启动表达式:/^
  • 如果您需要空格,请使用:[\s]\s
  • 如果需要括号,请使用:[(][)]。使用\(\)是丑陋的,会使事情变得混乱。
  • 如果希望任何内容是可选的,请在其后面添加?
  • 如果需要连字符,只需键入-[-]。但是,如果不将其放在一系列其他字符的开头或结尾,则可能需要对其进行转义:\-
  • 如果要在插槽中接受不同的选项,请在选项周围加上括号:[-.\s]将需要连字符、句点或空格。最后一个括号后面的问号将使所有这些内容对于该插槽都是可选的。
  • \d{3}:需要3位数字:000 - 999。简写为[0-9][0-9][0-9]
  • [2-9]:该插槽需要数字2 - 9。
  • (\+|1\s)?:接受"加号"或1加空格(管道符|是"or"),并使其成为可选。"加号"必须转义。
  • 如果您希望特定编号与插槽匹配,请输入这些编号:[246]将需要2、4或6。[77|78]将需要77或78。
  • $/:结束表达式
qmelpv7a

qmelpv7a3#

这是一个长正则表达式,但它支持两种格式(例如2是一个有效的国际号码,必须以+或00开头):

/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i

这允许扩展以及多种格式和分隔符选择。
匹配:

  • (+351)二八二四十三五零五十
  • 90191919908
  • 555-8909
  • 001 6867684
  • 001 6867684x1
  • 电话:1(234)567 - 8901
  • 电话:1 - 234 - 567 - 8901 x1234
  • 电话:1 - 234 - 567 - 8901转1234
  • 1 - 234 567.89/01分机号1234
  • 1(234)5678901 × 1234
  • (123)八五七五九七三
  • (0055)(123)8575973

在$n上,它可以节省:
1.国家指标
1.电话号码
1.延长
同样的答案在这里给出:一个用于电话号码验证的综合正则表达式(直接链接到我的答案)

mspsb9vt

mspsb9vt4#

/*
@isValidUSPhoneFormat function will check valid US Format
    Allowed US Format
(123) 456-7890
123-456-7890
123.456.7890
1234567890
(734) 555.1212
*/   

    function isValidUSPhoneFormat(elementValue){  
            var phoneNumberPattern = /^[(]{0,1}[0-9]{3}[)]{0,1}[-\s.]{0,1}[0-9]{3}[-\s.]{0,1}[0-9]{4}$/;  
            if(phoneNumberPattern.test(elementValue) == false)
            {
                 var phoneNumberPattern = /^(\()?\d{3}(\))?(.|\s)?\d{3}(.|\s)\d{4}$/; 
                 return phoneNumberPattern.test(elementValue);   
            }
            return phoneNumberPattern.test(elementValue);  
        }

希望这能帮助您理解JavaScript RegEx。

7kjnsjlb

7kjnsjlb5#

**甚至不要尝试。**试图防止您认为无效的输入可能会导致用户无法输入完全有效的电话号码而生气。如果用户确实想输入无效的电话号码,他/她无论如何都能做到。

x8diyxa7

x8diyxa76#

function checkPhoneNumber(val) {
    var num = document.getElementById(val).value;
    var mob=/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g;
    if (mob.test(num) == false) {
        alert("Please Enter Valid Phone Number.");
        document.getElementById(val).value = "";
        return false;
    }
     if (num.length > 15) {
        alert("Only 15 characters allowed for Phone Number field.");
        document.getElementById(val).value = "";
        return false;
    }

    return true;
}

试试吧

nafvub8i

nafvub8i7#

尝试使用libphonenumber-js包的**isValidPhoneNumber(phoneNumber,countryCode)方法。第一个参数是以"+"**开头的电话号码。第二个参数是国家/地区代码(例如:“US”、“IN”)。这有助于您准确验证任何国际号码。

5ssjco0h

5ssjco0h8#

国际电话号码的最佳库:google/libphonenumber
以下是CDN的示例:

<script src="https://cdn.jsdelivr.net/npm/google-libphonenumber@3/dist/libphonenumber.min.js"></script>
// Format Phone Number
function formatPhone(p) {
  var phoneUtil = libphonenumber.PhoneNumberUtil.getInstance();
  var parsedPhone = phoneUtil.parse(p);

  if (phoneUtil.isValidNumber(parsedPhone)) {
    return phoneUtil.format(parsedPhone, libphonenumber.PhoneNumberFormat.INTERNATIONAL)
  } else {
    return NaN
  }
}
tsm1rwdh

tsm1rwdh9#

下面是以宽松方式验证国际电话号码的更好选择。这不是严格验证
/^\s (?:+?(\d {1,3}))?([-.(](\d {3})[-.)])?((\d {3})[-.](\d {2,4})(?:[-. x]*(\d+))?)\s *$/gm
一个有效的Javascript函数如下所示

function validatePhone(phone) {
    var regex = /^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm;
    return regex.test(phone);
}
console.log(validatePhone('+973 11111111')) // true
console.log(validatePhone('+973 XX77yyss')) // false
    • 对于那些希望了解更多角色的人:**
    • *^**在行首Assert位置
    • *\s**匹配任何空白字符(相当于[\r\n\t\f\v])
      ******在零到无限次之间匹配上一个令牌,尽可能多地匹配,根据需要返回(贪婪)

非捕获组(?:+?(\d {1,3}))?

    • *?**匹配前一个令牌0到1次,尽可能多地匹配,根据需要返回(贪婪)
    • *+**与索引为4310(2B16或538)的字符+完全匹配(区分大小写)
    • *?**匹配前一个令牌0到1次,尽可能多地匹配,根据需要返回(贪婪)

第一捕获组(\d {1,3})

    • *\d**与数字匹配(相当于[0 - 9])
    • *{1,3}**与前一个令牌匹配1到3次,尽可能多地匹配,根据需要返回(贪婪)

第二捕获组([-.(](\d {3})[-.)])?

    • *?**匹配前一个令牌0到1次,尽可能多地匹配,根据需要返回(贪婪)

匹配下面列表中的单个字符[-.(]

******在零到无限次之间匹配上一个令牌,尽可能多地匹配,根据需要返回(贪婪)

    • *-.**(匹配列表中的单个字符-.((区分大小写)第三捕获组(\d {3})
    • *\d**与数字匹配(相当于[0 - 9])
    • *{3}**与前一个标记正好匹配3次

匹配下面列表中的单个字符[-.)]

******在零到无限次之间匹配上一个令牌,尽可能多地匹配,根据需要返回(贪婪)

    • *-.)**匹配列表中的单个字符-.)(区分大小写)

第四捕获组((\d {3})[-.](\d {2,4})(?:[-. x](\d+))?)
第五捕获组(\d {3})

    • *\d**与数字匹配(相当于[0 - 9])
    • *{3}**与前一个标记正好匹配3次

匹配下面列表中的单个字符[-.]

******在零到无限次之间匹配上一个令牌,尽可能多地匹配,根据需要返回(贪婪)

    • *-.**匹配列表中的单个字符-.(区分大小写)

第六捕获群(\d {2,4})

    • *\d**与数字匹配(相当于[0 - 9])
    • *{2,4}**与前一个令牌匹配2到4次,尽可能多地匹配,根据需要返回(贪婪)

非捕获组(?:[-. x]*(\d+))?

    • *?**匹配前一个令牌0到1次,尽可能多地匹配,根据需要返回(贪婪)

匹配下面列表中的单个字符[-. x]

******在零到无限次之间匹配上一个令牌,尽可能多地匹配,根据需要返回(贪婪)

    • *-. x**匹配列表中的单个字符-. x(区分大小写)

第7捕获组(\d+)

    • *\d**与数字匹配(相当于[0 - 9])
    • *+**在一次到无限次之间匹配上一个令牌,尽可能多地匹配,根据需要返回(贪婪)
    • *\s**匹配任何空白字符(相当于[\r\n\t\f\v])
      ******在零到无限次之间匹配上一个令牌,尽可能多地匹配,根据需要返回(贪婪)
    • *$**在行尾Assert位置

这将对以下模式和更多模式测试为阳性
123 - 4567(九二六)123 - 4567(九二六)123 - 4567(九二六)123 - 4567(九二六)123 - 4567(九二六)

相关问题