javascript - jQuery 电话正则表达式验证

标签 javascript jquery regex validation format

我的页面上有 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'
        } ...

这对我不起作用,有人明白为什么吗?或者有更好的方法来做到这一点吗? :)

最佳答案

您需要以下正则表达式:

/^\+(?:\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) 如子字符串或 -123 子字符串
      • -\d{3} - 连字符后跟 3 位数字
      • - - 连字符
      • (?:\d{2}-\d{2}|\d{4}) - 2 位数字,后跟连字符和 2 位数字或 4 位数字
    • | - 或
    • \d{11} - 11 位数字
  • $ - 字符串结尾

关于javascript - jQuery 电话正则表达式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235324/

相关文章:

php - 有条件地向远程站点提供 Logo

javascript - 分割字符串的最佳方法是什么(可能使用复杂的正则表达式)? (javascript/jquery)

javascript - 将 div 放在其上时链接不起作用

python - 按单词拆分(不区分大小写)

java - 正则表达式也限制不需要的表达式

python-3.x - 用于提取多个连字符之间的文本的正则表达式

javascript - 如何为 Canvas 上的对象编写 "drag"事件?

javascript - pdfmake base64 图片回调

javascript - React - 使用状态之外的函数设置组件状态,这是错误的吗?

java - 从 javascript 将对象传递给 Rest