【问题标题】:Validate phone number with JavaScript使用 JavaScript 验证电话号码
【发布时间】:2011-05-19 07:19:30
【问题描述】:

我在某个网站上找到了这段代码,它运行良好。它验证电话号码是以下格式之一:
(123) 456-7890123-456-7890

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

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

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

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

【问题讨论】:

  • 根据经验,尝试验证电话号码注定会失败。不同国家和扩展的不同结构是什么,这是一个非常困难的问题。
  • 那么例如法语符号? "12 34 56 78 90" 只需删除除数字以外的所有内容(可能开头的加号除外)并检查长度。
  • 不应该,其实用正则表达式来validate phone numbers properly

标签: javascript regex


【解决方案1】:

阿根廷数字的正则表达式: /^((+[0-9]{1,3}))?(([0-9]{8,13})|([0-9]{3,6})-([0-9 ]{4,7}))$/

有效:

X:从 8 到 13 个数字
  • XXXXXXXX
  • 用连字符分隔数字 = X 从 3 到 6; Y:从 4 到 7
  • XXXX-YYYY
  • Z:从 1 到 3
  • (+Z)XXXXXXXX
  • 如果您使用 Z 则 (+ ) 是强制性的。

    【讨论】:

      【解决方案2】:

      正则表达式

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

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

      像这样:<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


      【讨论】:

        【解决方案3】:

        我拿了@marty提供的那个,稍微修改了一下以适应更多的情况:

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

        有效格式:

        1. +1 123 4567890
        2. +11234567890
        3. +1(123)4567890
        4. +1(123)456-7890
        5. +1 (123) 456-7890
        6. +1 (123)456 7890
        7. +1 123 456-7890
        8. +1 123 456 7890
        9. +1 123-456-7890
        10. 123-456-7890
        11. 123 456-7890
        12. 123 456 7890
        13. 123 4567890
        14. 1234567890

        【讨论】:

          【解决方案4】:

          这个功能对我们很有效:

          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'));

          【讨论】:

            【解决方案5】:

            忽略除数字以外的所有内容。

            这是我使用的:

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

            【讨论】:

              【解决方案6】:

              试试这个

              /^(\+{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

              【讨论】:

              • {1} 没用,{0,} 最好写成*。为什么要使用所有这些捕获组?他们减慢了这个过程。
              • 这不好。因为您可以输入任意数量的数字。
              【解决方案7】:

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

              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'));

              【讨论】:

                【解决方案8】:

                此 reg ex 适用于国际电话号码和多种格式的手机号码。

                下面是正则表达式: /^(+{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

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

                【讨论】:

                • 这验证了 123 是有效的
                【解决方案9】:

                试试这个

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

                【讨论】:

                • 请确保在您的回答中包含解释。尽管它可能有效,但重要的是要解释如何以及为什么以获得完整和相关的信息。感谢您的回答:)
                【解决方案10】:

                试试这个js函数。 如果匹配则返回 true,如果失败则返回 false Ref

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

                【讨论】:

                  【解决方案11】:

                  /^\+?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");
                  

                  【讨论】:

                  • 这个正则表达式的唯一问题是它认为有效的电话字符串只有一个 ')' 或只有一个 '(' (如“(555-555-5555”))
                  【解决方案12】:

                  很简单

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

                  【讨论】:

                    【解决方案13】:
                    \\(?\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 的,因此是双重转义。

                    【讨论】:

                      【解决方案14】:

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

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

                      【讨论】:

                        【解决方案15】:

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

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

                        【讨论】:

                          【解决方案16】:

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

                          检查格式,希望它有效:
                          444-555-1234
                          传真:246.555.8888
                          手机:1235554567

                          【讨论】:

                          • 请格式化您的答案(使用四个空格作为代码块的缩进)。对代码的解释也将提高其质量。
                          【解决方案17】:

                          我选择的正则表达式是:

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

                          【讨论】:

                          • 什么是 /im ?在谷歌上找不到解释:)
                          • @SarinSuriyakoon i 使表达式不区分大小写,m 执行多行搜索
                          • 为什么数字需要不区分大小写?
                          • 这个正则表达式很棒,因为如果你删除开头的^ 和结尾的$,它也可以在字符串中间找到电话号码
                          • @darioxlz '123456789' 不是电话号码的有效长度
                          【解决方案18】:

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

                          $("#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;
                          }
                          

                          【讨论】:

                            【解决方案19】:

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

                            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);
                            }
                            

                            【讨论】:

                            • 同意忽略格式,例如手机号码通常带有空格,如 XXXX XXX XXX,但表单要求输入不带空格,即 XXXXXXXXXX。
                            【解决方案20】:

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

                            【讨论】:

                            • 不错的正则表达式,这是这个问题的最佳答案
                            【解决方案21】:
                            /^[+]*[(]{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

                            【讨论】:

                            • 正则表达式稍作修改以允许例如+41 (79) 123 45 67(瑞士):/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
                            • 这个似乎很适合我,因为它不是太字符串而且似乎涵盖了所有国际格式(感谢@RemigiusStalder 对瑞士的修复)
                            • 如果你有java后端,你可以添加电话号码规范化,例如来自github.com/google/libphonenumber
                            • 最好加个字数限制。用 [8, 14] 更改最后一个 *(星号):/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]{8,14}$/g
                            【解决方案22】:

                            首先,您的格式验证器显然只适用于NANP(国家代码+1)数字。电话号码来自北美以外的人是否会使用您的应用程序?如果是这样,您不想阻止这些人输入完全有效的 [国际] 号码。

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

                            因此,您的正则表达式将传递号码 (123) 123 4566,即使该号码不是有效的电话号码。您可以通过将\d{3} 替换为[2-9]{1}\d{2} 来解决此问题。

                            最后,我感觉您正在验证网络浏览器中的用户输入。请记住,客户端验证是only a convenience you provide to the user;您仍然需要(再次)验证服务器上的所有输入。

                            TL;DR 不要对validate complex real-world data like phone numbersURLs 使用正则表达式。使用specialized library

                            【讨论】:

                            【解决方案23】:

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

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

                            【讨论】:

                            • 这就是我要建议的。轻松活泼的。无论如何,过多的验证可能是一件坏事。
                            • 这是最好的方法。除非你真的很在意它的格式,否则这一切都是为了确保数字是部分有效的,而不是一堆乱七八糟的东西。
                            • 你的意思是匹配(/\d/g)不匹配(/\d/)或者长度为1,而不是10;此外,空字符串的匹配项为空。至少它应该是 var m = value.match(/\d/g);返回 m && m.length === 10
                            • return (value.match(/\d/g) || []).length == 10 或更简单(但同样有缺陷):return value.replace(/\D/g,'').length == 10
                            • 我喜欢这个:/\D/gi.test(value)。不是数字的所有内容,包括空格、破折号等......
                            【解决方案24】:

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

                            这是为 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 = 任意数字)。

                            【讨论】:

                              【解决方案25】:

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

                              【讨论】:

                              • 您需要转义 . 否则它将匹配任意字符,从而破坏您的正则表达式。
                              • 这使我朝着正确的方向前进。谢谢!不幸的是,这个表达式也将匹配 (1234567890 和 123)4567890。 ^((([0-9]{3}))|([0-9]{3}))[-\s\.]?[0-9]{3}[-\s\.]? [0-9]{4}$ 解决了这个小问题。
                              【解决方案26】:

                              我不得不承认验证电话号码是一项艰巨的任务。 至于这个具体问题,我会从

                              更改正则表达式
                              /^(()?\d{3}())?(-|\s)?\d{3}(-|\s)\d{4}$/
                              

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

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

                              【讨论】:

                              • 我真的在努力提升我的正则表达式游戏!我正在使用“正则表达式教练”检查您的建议。我正在使用正则表达式 (()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4} 和目标字符串 (123) 456-7890 但由于某种原因它只抓取最后 7 位数字。有什么想法吗?
                              • 是的,正则表达式对大脑有点粗糙......和耐心。好的试试 /^[(]?(\d{3})[)]?[-|\s]?(\d{3})[-|\s]?(\d{4})$/旧正则表达式的第一部分表现不佳: "(()?\d{3}())" (() 中间括号实际上被视为正则表达式语法的一部分,而不是要查找的字符。
                              【解决方案27】:

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

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

                              【讨论】:

                                【解决方案28】:

                                我建议使用更清晰的东西(尤其是考虑谁必须维护代码)......怎么样:

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

                                正则表达式是从一个清晰的模板构建的?然后添加一个新的就很容易了,甚至客户自己也可以在“选项”页面中做到这一点。

                                【讨论】:

                                  【解决方案29】:

                                  这将起作用:

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

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

                                  【讨论】:

                                    猜你喜欢
                                    • 2014-11-30
                                    • 2013-08-24
                                    • 1970-01-01
                                    • 2011-09-05
                                    • 1970-01-01
                                    • 1970-01-01
                                    相关资源
                                    最近更新 更多