Javascript-regex test()返回true,但并非所有字符都匹配(即使使用^ ... $)

时间:2018-09-05 07:03:33

标签: javascript regex

我尝试在文本区域中进行一些输入验证:

const re= /^[0-9A-Za-zÀ-ÿ\s\’\'\:\.\-\,\!\[\]\(\)\@\&\?]+?$/im;
re.test(control.value)

第一次测试:

+

返回假,到目前为止一切正常

第二次测试:

+
1234

test()返回true,而它应该继续返回false,因为它仍然包含无效字符,并且我使用^ ... $

请为此启发我

致谢

2 个答案:

答案 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