验证xss并允许jquery中的所有语言字符

时间:2017-01-09 15:16:35

标签: javascript jquery regex

我想对输入值进行验证,以避免使用正则表达式在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是一个有效的法语句子,但它正在抛出无效的输入。

任何人都可以帮助我。

1 个答案:

答案 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,如果它遇到的字符不在您的字符类中。

Here is a demo

修改

再次查看您的角色类后,我认为À-ÿ不是有效范围。范围取自ASCII表。如果你看一下这里,你会发现你要找的字符不是表格的一部分。

asciitable.com

因此,当您在正则表达式中执行范围时,它允许在可以找到的范围内使用字符。对于A-Z,它正在寻找65-90的ascii值。但是您的特定字符没有范围,因此您必须手动添加它们,如下所示:

var reg = /[^-a-zA-Z0-9\sÀÿé’']/;

在这里,我添加了é以及撇号’'的变体。

Here is an updated demo