用于输入验证的正则表达式白名单 - 重音不敏感

时间:2011-04-14 15:24:29

标签: c# javascript regex validation

我希望能够将用户输入限制为有效字符的白名单,但我不想阻止来自其他文化的人注册。 到目前为止,我有这个:

^[a-zA-Z0-9èéêëàáâãäçìíîïòóôõöùúûü-_]*$

它允许大多数法语口音,但拉丁字符集中的重音列表是IMMENSE!我宁愿使用白名单而不是黑名单,以防我错过了什么。

注意,这将适用于C#,但我想使用正则表达式进行客户端验证,以确保双方的一致性。当我将数据保存到数据库时,我正在对输入进行HTML编码。

是否有更优雅的方式使正则表达式重音不敏感,但仍然具有足够的限制性来阻止XSS?我不想疏远我的用户。

我希望能够有一些标点符号,但不能打开自己的XSS攻击,例如,我希望有人输入他们的公司名称:如果有人在雅虎工作,他们应该能够注册。< / p>

6 个答案:

答案 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 + \ / _ ,. @ - ] 这允许使用电子邮件,邮政编码,名字,姓氏等字符。