Javascript 正则表达式字符集-以及它们包含的内容
我正在为Node(express)中的字符串输入开发一种非常粗糙的消毒剂: 我已经浏览了一些插件和库,但它们中的大多数要么太复杂,要么太沉重。因此,我决定自己编写几个简单的消毒剂函数 其中之一就是这个,用于硬清理大多数字符串(不是数字…) 我来自瑞典,所以我需要这些信。我注意到这个正则表达式也接受其他字符。。。比如说 问题1) 有什么列表或类似的列表,我可以看到哪些字符实际上被接受,比如这个regex://[^a-ö]+/g 问题2) 我在Node和Express中工作。。。我认为这个简单的函数将通过输入字段停止攻击。我错了吗?问题1:找出答案。:) 在我的系统上Javascript 正则表达式字符集-以及它们包含的内容,javascript,regex,node.js,express,Javascript,Regex,Node.js,Express,我正在为Node(express)中的字符串输入开发一种非常粗糙的消毒剂: 我已经浏览了一些插件和库,但它们中的大多数要么太复杂,要么太沉重。因此,我决定自己编写几个简单的消毒剂函数 其中之一就是这个,用于硬清理大多数字符串(不是数字…) 我来自瑞典,所以我需要这些信。我注意到这个正则表达式也接受其他字符。。。比如说 问题1) 有什么列表或类似的列表,我可以看到哪些字符实际上被接受,比如这个regex://[^a-ö]+/g 问题2) 我在Node和Express中工作。。。我认为这个简单的函数
问题2:您希望阻止哪些攻击?不管怎样,答案都是“不,可能不会” 不要弄乱用户数据(我相信,比如说,法国或日本客户会对您的验证产生不满),而是确保在数据进入或退出客户视图时(HTML转义、SQL参数转义等)对其进行清理。问题1:找出答案。:) 在我的系统上
问题2:您希望阻止哪些攻击?不管怎样,答案都是“不,可能不会”
不要弄乱用户数据(我相信,比如说,法国或日本客户会对您的验证产生不满),而是确保在数据进入或退出客户视图时(HTML转义、SQL参数转义等)对其进行清理。
[x-y]
匹配unicode数字介于x和y之间的字符:
charsBetween = function(a, b) {
var a = a.charCodeAt(0), b = b.charCodeAt(0), r = "";
while(a <= b)
r += String.fromCharCode(a++);
return r
}
charsBetween("a", "ö")
> "abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö"
这将匹配列表中的拉丁字母和数字+单个字符的范围。
[x-y]
匹配unicode数字介于x和y之间的字符:
charsBetween = function(a, b) {
var a = a.charCodeAt(0), b = b.charCodeAt(0), r = "";
while(a <= b)
r += String.fromCharCode(a++);
return r
}
charsBetween("a", "ö")
> "abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö"
这与列表中的拉丁字母和数字+单个字符的范围相匹配。有许多我们实际上不知道的字符,如日语或俄语等。
因此,为了考虑它们,我们需要在正则表达式中使用Unicode范围而不是ASCII范围 我附带了这个正则表达式,它涵盖了整个Unicode表中几乎所有的书面字母,还有一些其他字符,比如数字,以及一些标点符号(中文标点符号已经包含在Unicode范围内)。 很难涵盖所有内容,可能这个范围包含了太多的字符,包括“外来”字符(符号): 所以我用这种方法来测试(必须不是空的): 请记住,这是缺少的字符,如:
:*()&#'\-:%
还有很多其他的。有很多我们实际上不知道的字符,比如日语或俄语等等。
因此,为了考虑它们,我们需要在正则表达式中使用Unicode范围而不是ASCII范围 我附带了这个正则表达式,它涵盖了整个Unicode表中几乎所有的书面字母,还有一些其他字符,比如数字,以及一些标点符号(中文标点符号已经包含在Unicode范围内)。 很难涵盖所有内容,可能这个范围包含了太多的字符,包括“外来”字符(符号): 所以我用这种方法来测试(必须不是空的): 请记住,这是缺少的字符,如:
:*()&#'\-:%
还有许多其他字符。由于插入符号,字符类与指定字符不匹配。由于插入符号,字符类与指定字符不匹配。您不想包括处理诸如“Linnéa”、“idé”、“armé”和“müsli”等单词的“ü”和“é”吗?你不想在处理诸如“Linnéa”、“idé”、“armé”和“müsli”之类的词时加入“ü”和“é”吗?
[^a-zA-Z0-9ÅÄÖåäö\s]
/^[\u0040-\u1FE0\u2C00-\uFFC00-9 ',.?!]+$/i
function validString(str) {
return str && typeof(str) == 'string' && /^[\u0040-\u1FE0\u2C00-\uFFC00-9 ',.?!]+$/i.test(str);
}
:*()&#'\-:%