我希望能够将用户输入限制为有效字符的白名单,但我不想阻止来自其他文化的人注册。 到目前为止,我有这个:
^[a-zA-Z0-9èéêëàáâãäçìíîïòóôõöùúûü-_]*$
它允许大多数法语口音,但拉丁字符集中的重音列表是IMMENSE!我宁愿使用白名单而不是黑名单,以防我错过了什么。
注意,这将适用于C#,但我想使用正则表达式进行客户端验证,以确保双方的一致性。当我将数据保存到数据库时,我正在对输入进行HTML编码。
是否有更优雅的方式使正则表达式重音不敏感,但仍然具有足够的限制性来阻止XSS?我不想疏远我的用户。
我希望能够有一些标点符号,但不能打开自己的XSS攻击,例如,我希望有人输入他们的公司名称:如果有人在雅虎工作,他们应该能够注册。< / p>
答案 0 :(得分:2)
也许你可以使用像[\ u00C0- \ u017E]这样的unicode范围,可以覆盖所有重音基础(但你应该检查字符图以确保,因为我不知道意大利语有什么口音)。
答案 1 :(得分:2)
fwiw:我使用home brew函数返回所有变音符号的RegEx:
function diacritsRegEx(global, caseinsitive, multiline){
var modifiers = (global ? 'g' : '')
+ (multiline ? 'm' : '')
+ (caseinsitive ? 'i' : '');
return new RegExp(
['[\\.\\-a-z\\s]|', // [a-z, . - and space]
'[\\300-\\306\\340-\\346]|', // all accented A, a
'[\\310-\\313\\350-\\353]|', // all accented E, e
'[\\314-\\317\\354-\\357]|', // all accented I, i
'[\\322-\\330\\362-\\370]|', // all accented O, o
'[\\331-\\334\\371-\\374]|', // all accented U, u
'[\\321-\\361]|', // all accented N, n
'[\\307-\\347]' // all accented C, c
]
.join(''), modifiers);
}
答案 2 :(得分:1)
^\w+$
难道你不能只使用字母数字标志,我相信接受重音。
答案 3 :(得分:1)
在一些正则表达式实现中,一个简单的\w
将覆盖所有这些。见http://www.regular-expressions.info/charclass.html
答案 4 :(得分:1)
如果你想允许字母(带变音符号或不带变音符号)和一些标点符号可以使用:
^[\w_-]+$
其中\ w表示任何字母,_-是允许的2个额外标点符号。别忘了把 - 最后用完了。
答案 5 :(得分:0)
对于用户输入的订单,我使用的是:[^ \ w \ s + \ / _ ,. @ - ] 这允许使用电子邮件,邮政编码,名字,姓氏等字符。