【问题标题】:jQuery Phone Regex ValidationjQuery 电话正则表达式验证
【发布时间】:2016-03-26 12:32:02
【问题描述】:

我在页面上有 jQuery 验证插件。当有人在表单字段中输入电话号码时,我希望验证器只识别某种格式 (ru):

+#(###)-###-##-##
or
+#-###-###-####
or
+#-###-###-##-##
or
+###########

我在 .js 文件中有这个:

$.validator.addMethod('customphone', function (value, element) {
    return this.optional(element) || /^\+d{1}(\d{3})\d{7}$/.test(value);
}, "Please enter a valid phone number");

$(document).ready(function() {
    $('form').validate({    
        rules: {
            phone: 'customphone'
        } ...

这对我不起作用,有人知道为什么吗?还是有更好的方法来做到这一点? :)

【问题讨论】:

标签: javascript jquery regex validation format


【解决方案1】:

您需要以下正则表达式:

/^\+(?:\d(?:\(\d{3}\)|-\d{3})-\d{3}-(?:\d{2}-\d{2}|\d{4})|\d{11})$/

regex demo

您拥有^\+d{1}(\d{3})\d{7}$ 的正则表达式有d 而不是\d(因此无法匹配数字)和未转义的括号(因此该模式与文字括号不匹配)。

细分:

  • ^ - 字符串开头
  • \+ - 文字 + 符号
  • (?:\d(?:\(\d{3}\)|-\d{3})-\d{3}-(?:\d{2}-\d{2}|\d{4})|\d{11}) - 两种选择:

    • \d(?:\(\d{3}\)|-\d{3})-\d{3}-(?:\d{2}-\d{2}|\d{4}):
      • \d - 一个数字
      • (?:\(\d{3}\)|-\d{3}) - (123) like substring 或 -123 substring
      • -\d{3} - 连字符后跟 3 位数字
      • - - 连字符
      • (?:\d{2}-\d{2}|\d{4}) - 2 位数字后跟连字符和 2 位数字或 4 位数字
    • | - 或
    • \d{11} - 11 位数字
  • $ - 字符串结尾

【讨论】:

    【解决方案2】:

    这对我不起作用,有人知道为什么吗?或者有没有更好的 怎么做? :)

    您的代码存在一些问题

    1. 正如 Tushar 所指出的,d 将仅匹配 d,以匹配您需要的数字 \d

    2. 您的正则表达式无法处理很多事情,包括 (###)-

    我猜你正在寻找这个正则表达式

    /^\+\d(\(\d{3}\)){0,1}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}$/g
    

    它将匹配

    /^\+\d(\(\d{3}\)){0,1}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}$/g.test("+4(222)-33-33-33"); //true
    /^\+\d(\(\d{3}\)){0,1}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}$/g.test("+4(222)-333-333-333"); //true
    /^\+\d(\(\d{3}\)){0,1}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}$/g.test("+4(222)333333333"); //true
    /^\+\d(\(\d{3}\)){0,1}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}$/g.test("+4333333333"); //true
    

    【讨论】:

    • 它不会因为你没有转义(和)字符
    • +88888888888(11 个符号)- 这是行不通的。 /^\+\d(\(\d{3}\)){0,1}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}(\-){0,1}\d{2,3}$/g.test("+4333333333"); - 只有 10 个符号,我需要 11 个。请帮忙!
    【解决方案3】:

    我不确定您的 javaScript,但这是您必须检查的不同正则表达式....我希望这会有所帮助。

    +#(###)-###-##-##
    ^\+\d{1}\(\d{3}\)\-\d{3}\-\d{2}\-\d{2}$
    +#-###-###-####
    ^\+\d{1}\-\d{3}\-\d{3}\-\d{4}$
    +#-###-##-##
    ^\+\d{1}\-\d{3}\-\d{2}\-\d{2}$
    +###########
    ^\+\d{11}$
    

    所以我会设置一个电话有效标志并测试每个正则表达式值以确定其中一个是否为真,将此标志设置为真,它将验证您的电话号码。

    var phoneValid = false;
    
    if(test1 == true || test2 == true || test3 == true || test4 == true) {
      phoneValid = true;
    } else {
      phoneValid = false;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多