2017-01-09 104 views
0

所有语言字符我想要做的输入值验证,以避免在使用正则表达式js文件SQL注入和跨站脚本。验证XSS和允许的jQuery

我想允许数字和所有语言的字符一些字符。但我无法得到这个正则表达式。

var sampleText="j’ai les réponses"; 
 
var reg = /^[a-zA-ZÀ-ÿ0-9\\-\\s ]+$/; 
 
\t if (sampleText != "" && !reg.test(sampleText)) { 
 
\t  alert("Invalid Text."); 
 
\t  return false; 
 
\t }

J'AI莱反应变量是一个有效的法文句子,但它是扔无效的输入。

任何一个可以帮我在这。

+0

这听起来对我来说是个坏主意。为什么不使用参数化查询并在输出上转义? – chris85

+0

看到您的更新后,我想到了更多,并发现另一个问题。请在我的回答中看到“编辑:”。 – Quixrick

回答

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

+0

谢谢你的回应。上述注册表达式仅适用于给定的示例文本j'ai lesréponses,如果像我们正在使用的Commençons这样的任何其他单词不允许。我想允许所有的语言字符或至少英语和法语。请帮助 –

+0

您需要添加您想要允许的每个角色。因此,在你的角色类中添加特殊的'c'字符,它应该匹配这个字。如果您有其他特殊字符,请将其添加。 – Quixrick