我尝试在文本区域中进行一些输入验证:
const re= /^[0-9A-Za-zÀ-ÿ\s\’\'\:\.\-\,\!\[\]\(\)\@\&\?]+?$/im;
re.test(control.value)
第一次测试:
+
返回假,到目前为止一切正常
第二次测试:
+
1234
test()返回true,而它应该继续返回false,因为它仍然包含无效字符,并且我使用^ ... $
请为此启发我
致谢
答案 0 :(得分:1)
问题是m
标志-它与 line 的开头和结尾匹配,而不与 string 的开头和结尾匹配。因此,使用您当前的代码,如果一个行通过,则整个正则表达式将通过。
要解决此问题,请在字符集中添加换行符(如果确实要允许它们),然后删除m
标志,以使您的^
和$
与字符串 only 的开头和结尾:
const re= /^[0-9A-Za-zÀ-ÿ\s\’\'\:\.\-\,\!\[\]\(\)\@\&\?\n]+?$/i;
const validate = str => re.test(str);
document.querySelector('textarea').onchange = function() {
console.log(re.test(this.value));
}
<textarea>
</textarea>
答案 1 :(得分:0)
选中here。您已添加m
标志。这意味着^ and $ matches start and end of line