我想在我的正则表达式中定义符号数量
_keyPress(ptrn: string, event: any) {
const pattern = new RegExp(ptrn);
const inputChar = String.fromCharCode(!event.charCode ? event.which : event.charCode);
const value = event.target.value;
if (!pattern.test(inputChar) && !pattern.test(value)) {
event.preventDefault();
return false;
}
}
HTML:
<input (keypress)="_keyPress('[a-z]{,6}', $event)">
但如果我使用数量量词,它就不起作用。谁可以说出了什么问题? https://plnkr.co/edit/fIVAvRJcubzD2SxZqlTY?p=preview
答案 0 :(得分:1)
首先event.charCode
为97
返回122
和a-z
之间的数字。因此,pattern.test(inputChar)
测试总是失败,因为您尝试将数字与字母表进行比较。因此,请将inputChar
更改为以下内容:
const inputChar = String.fromCharCode(event.key ? event.which : event.key);
此外,需要使用用户输入的下一个键更新值:
const value = (event.target.value) + inputChar;
我假设您试图限制用户输入除a-z
以外的任何键,并且只允许他们输入最多6个字母。因此,最终测试需要||
标志而不是&&
,因为当两个测试都通过时,应该允许输入,而不仅仅是当其中一个通过时。
if (!pattern.test(inputChar) || !pattern.test(value)) {
event.preventDefault();
return false;
}
这是从您那里分出来的Plnkr demo。