【问题标题】:regex expression in javascript not working as expectedjavascript中的正则表达式无法按预期工作
【发布时间】:2016-06-30 11:37:23
【问题描述】:

我们正在尝试查找给定的字符串是否是有效的印度手机号码

有效的印度手机号码

  1. 7 or 8 or 9开头
  2. 后跟 9 个相同或不同的数字

这是我用来匹配它的 JavaScript,但不幸的是,即使数字正确,它也会返回 false

var mobile_number = $('#number').val();
var mobile_regex = new RegExp('/^[789]\d{9}$/');
if(mobile_regex.test(mobile_number) == false) {
    console.log("not valid");
} else {
    console.log("valid");
}

【问题讨论】:

  • 什么是正确的数字? https://regex101.com/r/yW6vC2/1 在这里我可以看到 7123456789 是匹配的,例如。号码前后是否有其他符号?
  • var mobile_regex = /^[789]\d{9}$/;
  • @MariaDeleva 后跟 7,8,9 但长度必须等于 10
  • @anubhava 与当前方法有什么区别?只是想知道:RegExp() 不允许\d 吗?
  • @fedorqui:2 个问题。 RegExp 不需要正则表达式分隔符 / 并且需要双重转义。

标签: javascript regex


【解决方案1】:

您的代码有两个问题。如果您使用的是 RegExp 对象,则不需要 / 字符,并且需要对 \ 字符进行转义。

这可行:

var mobile_regex = new RegExp("^[789]\\d{9}");

或者,如果您想使用其他格式,这也可以:

if(!mobile_number.match(/^[789]\d{9}/)) {
    console.log("not valid");
} else {
    console.log("valid");
}

【讨论】:

  • 为什么在使用新的 RegExp 时需要对 \d 进行转义。 /?
  • 需要转义的只是\ 。原因是\ 是javascript字符串中的转义字符。
【解决方案2】:

你可以试试这个

   var mobile_number = $('#number').val();
   var mobile_regex = new Regex("^[7-9][0-9]{9}$")
   if(mobile_regex.test(mobile_number) == false) {
   console.log("not valid");
   } else {
    console.log("valid");
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多