【问题标题】:Regular expression for validating a mobile number验证手机号码的正则表达式
【发布时间】:2013-12-31 16:12:52
【问题描述】:

我正在使用正则表达式来验证 Javascript 中的手机号码。

我的条件是:

  1. 手机号码可以以 +60 或 +63 或 +62 或 +66 或 0 开头
  2. 手机号码的长度在 9 到 13 之间

我已经用代码试过了:

^(?:\+60|+63|+62|+66|0)[. ()-]*(?:\d[. ()-]*){10,11,12,13}$/;

但我没听懂。

示例手机号码是

+601126314441
01126342542
+631124445675
+661124445675
+621124445675
+60111243236
+62105273214
0105273214

【问题讨论】:

  • 你能发布一个应该匹配的数字的例子,但不是吗?或者一个不匹配但应该匹配的数字示例?
  • 更新了手机号码..@Guntram Blohm
  • @PravinKumar 只有这个条件?还是其他类似括号的东西?
  • 所以试试这个/(\+60|\+63|\+62|\+66|0)\d{9,13}/

标签: javascript jquery regex


【解决方案1】:

像这样更新你的正则表达式:

/^(\+60|\+63|\+62|\+66|0)\d{9,13}$/gm

在 www.jsregex.com 上验证(不要忘记检查全局和多行选项)

Fiddle Example :)

Javascript:

var reg = /(\+60|\+63|\+62|\+66|0)\d{9,13}/m;
var numbers = ['+601126314441', '01126342542', '+631124445675', '+661124445675', '+621124445675', '+60111243236', '+62105273214', '0105273214'];
var matched = [];
for (var i = 0; i < numbers.length; i++) {
    if (reg.test(numbers[i])) matched.push(numbers[i]);
}
console.log(matched.toString());

【讨论】:

  • 使用这个正则表达式,如果匹配的号码以 +6[0236] 开头,它将包含 11 到 15 个数字,如果它以 0 开头,则包含 10 到 14 个数字。您应该修改 \ d{9,13} 部分。
  • @Valentin 可能不包括移动长度的代码长度
  • @Grundy 要求不够明确,无法确定,这是真的 :)
  • 是的,我只是按照他的原始号码计算,我相信他可以调整它以计算出正确的号码。不幸的是,我对这些电话号码分配一无所知哈哈
【解决方案2】:
var testCases = [
    '+601126314441',
    '01126342542',
    '+631124445675',
    '+661124445675',
    '+621124445675',
    '+60111243236',
    '+62105273214',
    '0105273214'
]

function testMobNum (nstr) {
    return /^((\+{1}(60|62|63|66){1})|(0)){1}\d{9,13}$/.test(nstr);
}

testCases.map(testMobNum);
//returns [true, true, true, true, true, true, true, true]

【讨论】:

    【解决方案3】:

    您可以使用此示例中的正则表达式 -

    $a = array(
    '+601126314441',
    '01126342542',
    '+631124445675',
    '+6611244-45675',
    '+621124445675',
    '+60111243236',
    '+62105273214',
    '01052-73214',
    );
    
    foreach($a as &$phone) {
        echo $phone . ' -> ';
        if (preg_match('/^(?:\+60|\+63|\+62|\+66|0)[0-9-]{9,13}$/', $phone)) {
            echo 'PASS';
        } else {
            echo 'FAIL';
        }
        echo PHP_EOL;
    }
    

    在 php 中,这将输出以下内容:

    +601126314441 -> PASS
    01126342542 -> PASS
    +631124445675 -> PASS
    +6611244-45675 -> PASS
    +621124445675 -> PASS
    +60111243236 -> PASS
    +62105273214 -> PASS
    01052-73214 -> PASS
    

    【讨论】:

      【解决方案4】:

      如果代码长度包含到完整的手机号码,你可以尝试

      /^(\+6[0236]\d{7,11})|(0\d{8,12})$/
      

      如果+也包含在数字长度中,那么

      /^(\+6[0236]\d{6,10})|(0\d{8,12})$/
      

      再试试

      /^(\+6[0236]|0)\d{9,13}$/
      

      【讨论】:

        【解决方案5】:

        嗯,有趣:)

        Java 脚本代码:

        // your regex pattern to check mobile number
        var mobRegex = /^(\+60|\+63|\+62|\+66|0)\d{9,13}$/;
        // empty array
        var validMobile = [];
        // some sample numbers to check
        var mobileCollection = [
            '+60123456789',
            '+691234567891',
            '+6012345678912',
            '+60123456789123',
            '+601234567891234',
            '+63123456789',
            '+631WE234567891',
            '+6312345678912',
            '+63123456789123',
            '+6312 34567891234',
            '+62123456789',
            '+621234567891',
            '+6212345678912',
            '+62123456789123',
            '+6212-34567891234',
            '+66123456789',
            '+661234567891',
            '+6612345678912',
            '+66123456789123',
            '+661234OP7891234',
            '0123456789',
            '01234567891',
            '+9112445678912',
            '0123456789123',
            '01234567891234'
        ];
        // check every number and file right one
        for (var i = 0; i < mobileCollection.length; i++) {
            if (mobRegex.test(mobileCollection[i])) {
                validMobile.push(mobileCollection[i]);
            }
        }
        // alert all valid mobile number
        alert(validMobile.toString());
        // here is output
        +60123456789,+6012345678912,+60123456789123,+601234567891234,+63123456789,
        +6312345678912,+63123456789123,+62123456789,+621234567891,+6212345678912,
        +62123456789123,+66123456789,+661234567891,+6612345678912,+66123456789123,
        0123456789,01234567891,0123456789123,01234567891234 
        

        【讨论】:

          猜你喜欢
          • 2014-04-18
          • 1970-01-01
          • 2018-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-23
          相关资源
          最近更新 更多