用于输入验证的正则表达式白名单-不区分重音符号

问题描述

| 我希望能够将用户输入限制为有效字符的白名单,但我不想阻止来自其他文化背景的人注册。 到目前为止,我有这个:
^[a-zA-Z0-9èéêëàáâãäçìíîïòóôõöùúûü-_]*$
它可以使用大多数法语口音,但是拉丁字符集中的口音列表为IMMENSE!如果我错过了某些事情,我宁愿使用白名单而不是黑名单。 注意,这将用于C#,但是我想使用正则表达式进行客户端验证,使双方都保持一致。当我将输入也保存到数据库时,我正在对输入进行HTML编码。 是否有一种更精美的方法使正则表达式不敏感,但仍具有足够的限制性以防止XSS?我不想疏远我的用户。 我希望能够有一些标点符号,但不希望自己受到XSS攻击,例如,我希望有人输入他们的公司名称:如果有人在Yahoo!工作,他们应该可以注册。     

解决方法

^\\w+$
您不能只使用字母数字标志,我相信您可以接受这些重音符号。     ,也许您可以使用unicode范围,例如[\\ u00C0-\\ u017E]适当地覆盖所有重音基础(但是您应该检查字符映射表以确保正确,因为我不知道意大利语具有什么重音)。     ,fwiw:我使用一个家庭酿造函数,该函数为所有直径返回正则表达式:
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);
}
    ,在某些正则表达式实现中,简单的“ 3”将覆盖所有这些内容。参见http://www.regular-expressions.info/charclass.html     ,如果要允许字母(带或不带变音符号)和一些标点符号,可以使用:
^[\\w_-]+$
其中\\ w代表任何字母,而_-是允许的2个允许的额外标点符号。不要忘记使用-结尾。     ,对于用户输入的订购单,我正在使用以下格式:[^ \\ w \\ s + \\ /_,.@-] 这允许电子邮件,邮政编码,名字,姓氏等字符。