首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证xss并允许jquery中的所有语言字符

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

Stack Overflow用户
提问于 2017-01-09 15:16:35
回答 1查看 1.4K关注 0票数 0

我希望对输入值进行验证,以避免使用正则表达式在js文件中使用SQL注入和跨站点脚本。

我希望允许数字和所有语言字符与一些字符。但我无法得到这方面的正则表达式。

代码语言:javascript
复制
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是一个有效的法语句子,但它是抛出无效输入。

有人能帮我吗。

EN

回答 1

Stack Overflow用户

发布于 2017-01-09 16:09:58

好吧,这里有几个想法供你玩玩。

首先,您不需要转义字符类中的破折号-和空格\s字符。

另外,很好的做法是将破折号移到字符类的前端(或末端),这样regex引擎就不会尝试使用它的范围。如果您使用的是\s,您也不需要这个空间,因为它将包括它。

代码语言:javascript
复制
var reg = /^[-a-zA-ZÀ-ÿ0-9\s]+$/;

但是,可能会帮助你走上正确的轨道的是看看你告诉脚本要做的是什么。您使用逻辑有效地表示的是查看您的sampleText是否与您的字符类中的任何字符不匹配。但是因为它匹配了所有的字母,所以您正在尝试执行的测试中获得了一次及格。

一种更好的方法是做以下事情:

代码语言:javascript
复制
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值。但是,您的特定字符没有范围,因此必须手动添加它们,如下所示:

代码语言:javascript
复制
var reg = /[^-a-zA-Z0-9\sÀÿé’']/;

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

下面是一个更新的演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41551116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档