我希望对输入值进行验证,以避免使用正则表达式在js文件中使用SQL注入和跨站点脚本。
我希望允许数字和所有语言字符与一些字符。但我无法得到这方面的正则表达式。
var sampleText="j’ai les réponses";
var reg = /^[a-zA-ZÀ-ÿ0-9\\-\\s ]+$/;
if (sampleText != "" && !reg.test(sampleText)) {
alert("Invalid Text.");
return false;
}
J‘’ai les réponses是一个有效的法语句子,但它是抛出无效输入。
有人能帮我吗。
发布于 2017-01-09 16:09:58
好吧,这里有几个想法供你玩玩。
首先,您不需要转义字符类中的破折号-和空格\s字符。
另外,很好的做法是将破折号移到字符类的前端(或末端),这样regex引擎就不会尝试使用它的范围。如果您使用的是\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。
编辑:
在再次查看您的字符类之后,我认为À-ÿ不是一个有效的范围。范围取自ASCII表。如果你看一下这里,你会发现你要寻找的字符不是表的一部分。
asciitable.com
因此,当您在regex中执行范围时,它允许在它可以找到的范围内的字符。对于A-Z,它正在寻找65-90的ascii值。但是,您的特定字符没有范围,因此必须手动添加它们,如下所示:
var reg = /[^-a-zA-Z0-9\sÀÿé’']/;在这里,我添加了é和撇号’'的变体。
https://stackoverflow.com/questions/41551116
复制相似问题