0

我想允许用户按以下格式输入他的手机号码:

+66 798644356

或者

798644356

所以基本上有或没有国家代码。我也想允许打开和关闭括号 ()

我首先开始使用下面的代码来限制数字,但是我注意到这不是正确的方法,因为它阻止你使用 + 符号和括号 ():

        $('#signup-phone-number , #signup-mobile-number').keyup( function() {
           $(this).numeric();
        });

我读过您可以使用正则表达式,但是我对此并不陌生。我做了一些谷歌搜索,这是我想使用的正则表达式:

^((+){0,1}91(\s){0,1}(-){0,1}(\s){0,1}){0,1}98(\s){0 ,1}(-){0,1}(\s){0,1}[1-9]{1}[0-9]{7}$

问题是我必须如何在 jquery 中实现它?

4

4 回答 4

1

下面的正则表达式可以匹配任何类型的数字,记住,我假设+是可选的。但是它不处理数字计数

^\+?(\d[\d-. ]+)?(\([\d-. ]+\))?[\d-. ]+\d$

以下是一些您可以匹配的有效数字:

+91293227214
+3 313 205 55100
99565433
011 (103) 132-5221
+1203.458.9102
+134-56287959
(211)123-4567
111-123-4567
于 2013-08-05T11:41:17.163 回答
1

将所有非数字字符和国家代码 (+66) 替换为空,然后检查剩余数字的长度是否正确。

var normalized_input = input.replace( "+66", "" ).replace( /[^\d]/g, "" );
if( normalized_input.length == 10 ) {
  console.log( "Yay! This is a valid phone number" );
}

规范化输入将使电话号码的使用更容易。

于 2013-08-05T11:47:00.953 回答
1

对于验证,我通常使用jQuery Validator Plugin

这是英国电话号码的自定义规则:

jQuery.validator.addMethod('ukPhone', function(value, element){
        return value.match(/^((\(44\))( )?|(\(\+44\))( )?|(\+44)( )?|(44)( )?)?((0)|(\(0\)))?( )?(((1[0-9]{3})|(7[1-9]{1}[0-9]{2})|(20)( )?[7-8]{1})( )?([0-9]{3}[ -]?[0-9]{3})|(2[0-9]{2}( )?[0-9]{3}[ -]?[0-9]{4}))$/);
}, 'Enter a valid phone number'); 

如何使用带有自定义规则的插件:

jQuery('#form-id').validate({
     rules: {
        telephone: {
           required: true,
           ukPhone: true
        }
     }
 });
于 2013-08-05T11:44:31.197 回答
0

正则表达式 演示

$('#phn_num').blur(function () {
    var reg = /(\+66)?( )?[0-9]{9}/;
    if(reg.test($(this).val())){
        alert('correct');
    }
});

同时支持+66 798644356798644356

演示

HTML

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

js

$('#phn_num').attr('maxlength','9');

$('#phn_num').keypress(function (evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) return false;

    return true;
});
于 2013-08-05T11:40:21.870 回答