这里好有一对夫妇的想法,你玩弄。
首先,您不需要在字符类内跳过破折号-
和空白\s
个字符。
此外,它的仪表板移动到字符类的前面(或结束),因此正则表达式引擎不会尝试作出一系列出来的好习惯。如果你正在使用\s
,你也不需要的空间
,因为它将包括它。
var reg = /^[-a-zA-ZÀ-ÿ0-9\s]+$/;
但是可能会帮助你在正确的轨道上是看看它是什么,你是在告诉脚本来执行。你有效地说出你的逻辑是看你的sampleText
是否与角色类中的任何角色都不匹配。但是因为它匹配所有的字母,所以你正在尝试执行测试。
一种更好的方式去了解它是做类似如下:
var sampleText="Rocking around the Christmas tree";
var reg = /[^-a-zA-ZÀ-ÿ0-9\s]/;
if (sampleText != "" && reg.test(sampleText)) {
alert("Invalid Text.");
}
else {
alert("All of the characters are valid!");
}
当你加入一个插入符^
到类的开始,然后否定字符类尽量让通过删除感叹号与您的表情正面匹配,如下所示:reg.test(...
。
这样做的目的是查找任何不属于允许的字符列表的字符,然后将它标记为Invalid Text
,如果它确实遇到了不属于您的字符类的字符。
Here is a demo
编辑:
在你的性格类再次寻找后,我认为À-ÿ
不是一个有效的范围。范围取自ASCII表格。如果你看看这里,你会发现你正在寻找的角色不是表格的一部分。
asciitable.com
所以,当你在正则表达式做一个范围,它允许它可以找到一个字符范围。对于A-Z
,它正在查找65-90
的ascii值。但没有为特定字符的范围内,所以你必须将它们添加手动,像这样:
var reg = /[^-a-zA-Z0-9\sÀÿé’']/;
在这里,我在撇号’'
的é
,也是变种增加。
Here is an updated demo
这听起来对我来说是个坏主意。为什么不使用参数化查询并在输出上转义? – chris85
看到您的更新后,我想到了更多,并发现另一个问题。请在我的回答中看到“编辑:”。 – Quixrick