使用JavaScript验证电话号码

2020/11/13 17:23 · javascript ·  · 0评论

我在某些网站上找到了此代码,并且效果很好。它验证电话号码是以下格式之一:
(123)456-7890123-456-7890

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

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

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

如何添加它还可以验证另一种格式?我对正则表达式不好。

首先,您的格式验证器显然仅适用于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}

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

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

我选择的正则表达式是:

/^[\+]?[(]?[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

如果您只寻找10位数字,请忽略除数字以外的所有内容,

   return value.match(/\d/g).length===10;

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

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);
}
/^[+]*[(]{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


123-456-7890


123.456.7890


1234567890


+31636363634


075-63546725

这是一个非常宽松的选项,我倾向于保留这种方式,大多数情况下,我在需要用户添加电话号码的注册表中使用它。通常,用户在执行严格的格式规则的表单时会遇到麻烦,我更希望用户在显示屏中或在将其保存到数据库之前填写数字及其格式。
http://regexr.com/3c53v

以下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}$/

我建议使用更清晰的方法(尤其是考虑要由谁来维护代码)...

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

regexp是从一个清晰的模板构建的?这样一来,添加新产品就变得轻而易举了,甚至客户本身也可以在“选项”页面中做到这一点。

其中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");

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

/^[+]?(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从法国拨打

这将起作用:

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

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

/^\+?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-5555

这些不被接受:

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 2 757 622-7382 10(757)622 -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");

真的很简单

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

每个人的答案都很棒,但是我认为这是更全面的答案...

这是为单行中的单个数字的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 =任何数字)。

此正则表达式适用于国际电话号码和多种格式的移动电话号码。

这是正则表达式:/ ^(+ {1} \ d {2,3} \ s?[(] {1} \ d {1,3} [)] {1} \ s?\ d + | + \ d {2,3} \ s {1} \ d + | \ d +){1} [\ s |-]?\ d +([\ s |-]?\ d +){1,2} $ /

这是JavaScript函数

function isValidPhone(phoneNumber) {
    var found = phoneNumber.search(/^(\+{1}\d{2,3}\s?[(]{1}\d{1,3}[)]{1}\s?\d+|\+\d{2,3}\s{1}\d+|\d+){1}[\s|-]?\d+([\s|-]?\d+){1,2}$/);
    if(found > -1) {
        return true;
    }
    else {
        return false;
    }
}

这将验证以下格式:

+44 07988-825 465(使用连字符代替空格,但只能在+44后面加上空格)

+44(0)7988-825 465(使用连字符代替空格的任何组合,除了在(0)之前或之后不能直接存在连字符,并且(0)之前或之后的空格不必存在)

123 456-789 0123(使用连字符代替空格)

123-123 123(用连字符代替空格)

123 123456(空格可以用连字符代替)

1234567890

所有格式都不能存在双空格或双连字符。

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

?字符表示前一组应匹配零或一次。该组(-|\s)将匹配一个-或一个|字符。

我必须同意验证电话号码是一项艰巨的任务。至于这个特定的问题,我将改变正则表达式从

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

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

因为最后一个破折号/空格是唯一一个不再需要的元素。

如果您在输入标签上使用,则此代码将对您有所帮助。我自己编写此代码,我认为这是在输入中使用的很好方法。但您可以使用自己的格式进行更改。这将帮助用户在输入标签上更正其格式。

$("#phone").on('input', function() {  //this is use for every time input change.
        var inputValue = getInputValue(); //get value from input and make it usefull number
        var length = inputValue.length; //get lenth of input

        if (inputValue < 1000)
        {
            inputValue = '1('+inputValue;
        }else if (inputValue < 1000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, length);
        }else if (inputValue < 10000000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, length);
        }else
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, 10);
        }       
        $("#phone").val(inputValue); //correct value entered to your input.
        inputValue = getInputValue();//get value again, becuase it changed, this one using for changing color of input border
       if ((inputValue > 2000000000) && (inputValue < 9999999999))
      {
          $("#phone").css("border","black solid 1px");//if it is valid phone number than border will be black.
      }else
      {
          $("#phone").css("border","red solid 1px");//if it is invalid phone number than border will be red.
      }
  });

    function getInputValue() {
         var inputValue = $("#phone").val().replace(/\D/g,'');  //remove all non numeric character
        if (inputValue.charAt(0) == 1) // if first character is 1 than remove it.
        {
            var inputValue = inputValue.substring(1, inputValue.length);
        }
        return inputValue;
}

只是想添加一个专门用于选择非本地电话号码(800和900类型)的解决方案。

(\+?1[-.(\s]?|\()?(900|8(0|4|5|6|7|8)\3+)[)\s]?[-.\s]?\d{3}[-.\s]?\d{4}

试试这个js函数。如果匹配,如果失败返回真假
参考

function ValidatePhoneNumber(phone) {
        return /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/.test(phone);
}

验证电话号码+返回格式化的数据

function validTel(str){
  str = str.replace(/[^0-9]/g, '');
  var l = str.length;
  if(l<10) return ['error', 'Tel number length < 10'];
  
  var tel = '', num = str.substr(-7),
      code = str.substr(-10, 3),
      coCode = '';
  if(l>10) {
    coCode = '+' + str.substr(0, (l-10) );
  }
  tel = coCode +' ('+ code +') '+ num;
  
  return ['succes', tel];
}

console.log(validTel('+1 [223] 123.45.67'));

试试这个

/ ^(\ + {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,} $ / gm

有效格式

  • (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

此功能对我们有效:

let isPhoneNumber = input => {

  try {
    let ISD_CODES = [93, 355, 213, 1684, 376, 244, 1264, 672, 1268, 54, 374, 297, 61, 43, 994, 1242, 973, 880, 1246, 375, 32, 501, 229, 1441, 975, 591, 387, 267, 55, 246, 1284, 673, 359, 226, 257, 855, 237, 1, 238, 1345, 236, 235, 56, 86, 61, 61, 57, 269, 682, 506, 385, 53, 599, 357, 420, 243, 45, 253, 1767, 1809, 1829, 1849, 670, 593, 20, 503, 240, 291, 372, 251, 500, 298, 679, 358, 33, 689, 241, 220, 995, 49, 233, 350, 30, 299, 1473, 1671, 502, 441481, 224, 245, 592, 509, 504, 852, 36, 354, 91, 62, 98, 964, 353, 441624, 972, 39, 225, 1876, 81, 441534, 962, 7, 254, 686, 383, 965, 996, 856, 371, 961, 266, 231, 218, 423, 370, 352, 853, 389, 261, 265, 60, 960, 223, 356, 692, 222, 230, 262, 52, 691, 373, 377, 976, 382, 1664, 212, 258, 95, 264, 674, 977, 31, 599, 687, 64, 505, 227, 234, 683, 850, 1670, 47, 968, 92, 680, 970, 507, 675, 595, 51, 63, 64, 48, 351, 1787, 1939, 974, 242, 262, 40, 7, 250, 590, 290, 1869, 1758, 590, 508, 1784, 685, 378, 239, 966, 221, 381, 248, 232, 65, 1721, 421, 386, 677, 252, 27, 82, 211, 34, 94, 249, 597, 47, 268, 46, 41, 963, 886, 992, 255, 66, 228, 690, 676, 1868, 216, 90, 993, 1649, 688, 1340, 256, 380, 971, 44, 1, 598, 998, 678, 379, 58, 84, 681, 212, 967, 260, 263],
      //extract numbers from string
      thenum = input.match(/[0-9]+/g).join(""),
      totalnums = thenum.length,
      last10Digits = parseInt(thenum) % 10000000000,
      ISDcode = thenum.substring(0, totalnums - 10);

    //phone numbers are generally of 8 to 16 digits
    if (totalnums >= 8 && totalnums <= 16) {
      if (ISDcode) {
        if (ISD_CODES.includes(parseInt(ISDcode))) {
          return true;
        } else {
          return false;
        }
      } else {
        return true;
      }
    }
  } catch (e) {}

  return false;
}

console.log(isPhoneNumber('91-9883208806'));

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

查看格式,希望它能起作用:

444-555-1234


f:246.555.8888


m:1235554567

\\(?\d{3}\\)?([\-\s\.])?\d{3}\1?\d{4}

这将验证任何可变格式的电话号码:

\\(?\d{3}\\)? 查找是否用括号括起来的3位数字。

([\-\s\.])? 是否找到这些分隔符

\d{3} 找到3位数字

\1使用第一个匹配的分隔符-这样可以确保分隔符相同。因此(000)999-5555在此处将不会验证,因为存在空格和破折号分隔符,因此只需删除“ \ 1”并替换为分隔符子模式(这样做还将验证非标准格式)。但是,无论如何,您都应该为用户输入提供格式提示。

\d{4} 找到4位数字

验证:

  • (000)999 5555
  • (000)-999-5555
  • (000).999.5555
  • (000)999-5555
  • (000)9995555
  • 000 999 5555
  • 000-999-5555
  • 000.999.5555
  • 0009995555

顺便说一句,这是针对JavaScript的,因此转义了两倍。

只是忽略数字以​​外的所有内容。

这是我用的:

// 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
}

试试这个

/^[\+]?\d{2,}?[(]?\d{2,}[)]?[-\s\.]?\d{2,}?[-\s\.]?\d{2,}[-\s\.]?\d{0,9}$/im

有效格式:

  1. (123)456-7890
  2. (123)456-7890
  3. 123-456-7890
  4. 123.456.7890
  5. 1234567890
  6. +31636363634
  7. +3(123)123-12-12
  8. +3(123)123-12-12
  9. +3(123)1231212
  10. +3(123)12312123
  11. 075-63546725
本文地址:http://javascript.askforanswer.com/shiyongjavascriptyanzhengdianhuahaoma.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!