匹配功能给出错误的结果

时间:2018-11-23 15:48:25

标签: javascript regex angular typescript match

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

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输入{{ 1}},并且在电话输入中,(XXX)返回XXXX-XXXX的结果是错误的,因此应该返回true。我的功能怎么了?

1 个答案:

答案 0 :(得分:0)

您需要像这样将anchor的正则表达式添加到end of the string

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

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

对于字符串的开头也是如此:指定'^'。

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