我正在尝试使用正则表达式匹配电话号码:
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
。我的功能怎么了?
答案 0 :(得分:0)
您需要像这样将anchor
的正则表达式添加到end of the string
:
if (lada.length == 5) {
p = '^\\d{3}.\\d{4}$';
} else {
p = '^\\d{4}.\\d{4}$';
}
否则,它将至少与您指定的数字匹配(忽略多余的数字)。
对于字符串的开头也是如此:指定'^
'。
以'$
'结尾的字符串将确保字符串以您的数字结尾。