【问题标题】:Match function is giving wrong results [duplicate]匹配功能给出错误的结果[重复]
【发布时间】:2018-11-23 15:48:25
【问题描述】:

我正在尝试用正则表达式匹配电话号码:

this.Formareamedia.get('ladacontacto').valueChanges.subscribe((lada) => {
  let p;
  if (lada.length == 5) {
    p = '\\d{3}.\\d{4}';
  } else {
    p = '\\d{4}.\\d{4}';
  }
  this.Formareamedia.get("telefonocontacto").setValidators(Validators.pattern(new RegExp(p)));
  this.Formareamedia.get("telefonocontacto").updateValueAndValidity();
  this.ladacontacto = lada;
  let telefono = this.Formareamedia.get('telefonocontacto').value;
  console.log(new RegExp(p).lastIndex);
  if (telefono && telefono.match(new RegExp(p))) {
    return null;
  } else {
    return {
      telefono: false
    }
  }
});

如果我输入 lada 输入 (XX) 和 Telefono 输入 XXXX-XXXX,则函数返回 true(正确结果),但如果我输入 lada 输入 (XXX) 和 Telefono 输入XXXX-XXXX 正在返回 true 一个错误的结果,它应该返回 false。我的功能有什么问题?

【问题讨论】:

    标签: javascript regex angular typescript match


    【解决方案1】:

    你需要将你的正则表达式anchorend of the string,像这样:

     if (lada.length == 5) {
        p = '^\\d{3}.\\d{4}$';
      } else {
        p = '^\\d{4}.\\d{4}$';
      }
    

    否则它将至少匹配您指定的数字(忽略多余的数字)。

    同样适用于字符串的开头:指定'^'。

    以'$'结尾,它将确保字符串以您的数字结尾。

    【讨论】:

    • 没错谢谢!!
    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多