用于输入验证的Regex白名单-不区分重音
本文关键字:不区 名单 验证 输入 Regex 白名单 用于 | 更新日期: 2023-09-27 17:50:06
我希望能够将用户输入限制为有效字符的白名单,但我不想阻止来自其他文化的人注册。到目前为止,我有这个:
^[a-zA-Z0-9èéêëàáâãäçìíîïòóôõöùúûü-_]*$
它允许大多数法语口音,但拉丁字符集中的口音列表是巨大的!我更喜欢使用白名单而不是黑名单,以防我遗漏了什么。
注意,这将是c#,但我想使用正则表达式的客户端验证是一致的双方。我是HTML编码的输入,当我保存到数据库以及。
是否有一种更优雅的方法使正则表达式重音不敏感,但仍然有足够的限制来防止XSS?我不想疏远我的用户。
我希望能够有一些标点符号,但不开放自己的XSS攻击,例如,我希望有人输入他们的公司名称:如果有人在雅虎工作!
也许你可以使用unicode范围,如['u00C0-'u017E]可能涵盖所有基础的口音(但你应该检查字符映射以确保,因为我不知道意大利语有什么口音)。
fwiw:我使用一个自制函数返回所有字符的RegExp:
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);
}
^'w+$
你能不能只用字母数字标志,我相信它接受重音
在一些正则表达式实现中,一个简单的'w
将涵盖所有这些。见http://www.regular-expressions.info/charclass.html
如果你想允许字母(带或不带变音符号)和一些标点符号,你可以使用:
^['w_-]+$
,其中'w代表任意字母,_-是允许的两个额外标点符号。
对于用户输入的订单形式,我使用这个:[^'w's+'/_,.@-]这允许字符输入电子邮件、邮政编码、名字、姓氏等。