我想对输入值进行验证,以避免使用正则表达式在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'ailesréponses是一个有效的法语句子,但它正在抛出无效的输入。
任何人都可以帮助我。
答案 0 :(得分:0)
这里有几个想法让你可以玩。
首先,您不需要在角色类中转义短划线-
和空格\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
,如果它遇到的字符不在您的字符类中。
修改强>
再次查看您的角色类后,我认为À-ÿ
不是有效范围。范围取自ASCII表。如果你看一下这里,你会发现你要找的字符不是表格的一部分。
因此,当您在正则表达式中执行范围时,它允许在可以找到的范围内使用字符。对于A-Z
,它正在寻找65-90
的ascii值。但是您的特定字符没有范围,因此您必须手动添加它们,如下所示:
var reg = /[^-a-zA-Z0-9\sÀÿé’']/;
在这里,我添加了é
以及撇号’'
的变体。