验证手机号的正则表达式

4

我正在使用正则表达式在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
1
@PravinKumar 只有这个条件吗?还是像括号之类的其他东西? - Grundy
1
请尝试使用此正则表达式:/(\+60|\+63|\+62|\+66|0)\d{9,13}/ - Grundy
@Grundy:这里最少需要9个字符才能满足要求。 - Pravin Kumar
@Grundy 抱歉..谢谢,我明白了...那是我的错误..我把8放成9了。 - Pravin Kumar
显示剩余6条评论
5个回答

2

请将您的正则表达式更新为以下内容:

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

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

演示例子 :)

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
@Valentin 可能不包括移动长度的代码长度。 - Grundy
@Grundy 要求不够清晰,确实无法确定 :) - Valentin
是的,我只是根据他原来的号码去操作了,我相信他可以调整以找到正确的号码。不幸的是,我对这些电话号码的分配一无所知哈哈。 - Deryck

1
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]

0
你可以使用这个例子中的正则表达式 -
$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

0

嗯,有趣 :)

JavaScript 代码:

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

0

如果代码长度包括完整的手机号码,您可以尝试

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

如果数字长度中也包含+,那么
/^(\+6[0236]\d{6,10})|(0\d{8,12})$/

否则尝试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接