首先这不是重复的(据我所知)。
我真正想要的是允许用户有一个只包含有效字符的用户名(配置文件名称),在我的情况下,是所有语言的字母,以及空格。但同时要防止数字、符号(如!@#$%^&*()|/?'";:=+-_.<>,~
)、其他不常见的符号(如©®♣♥♠♩¸¸♪·¯·♫
)、换行符、制表符和类似的字符、表情符号,以及每一个不正常出现在名字中的字符……
嗯,为了更清楚,我想实现与Facebook完全相同的个人资料名称系统。
我正在使用JS (Node),到目前为止,我尝试了正则表达式,但我不认为在该表达式中键入unicode中有效字符的每一个范围是明智的,是吗?!当我需要编辑这些范围时,我甚至不会去想这会给我带来什么……
是否有库提供这样做的方法?如果没有,我还有什么其他选择?
任何帮助都是感激的!
对于英语,您可以使用简单的字符类,如/^[a-zA-Z ]$/
或字字符/^[w ]$/
。在Unicode中有一个等价的:
/^[p{L}p{M}p{Zs}]{2,30}$/u
解释:
- 使用'u'标志启用Unicode
p{L}
-表示任意语言中的字母字符p{M}
-表示标记(重音等)p{Zs}
-表示空格字符,如常规空格和日文空格
如果你想在开始和结束处避免空格,使用这些负的前导:
/^(?!p{Zs})(?!.*p{Zs}$)[p{L}p{M}p{Zs}]{2,30}$/u
示例函数:
function validateName(name) {
return /^[p{L}p{M}p{Zs}]{2,30}$/u.test(name);
}
参见https://regex101.com/r/A4QDIf/1
的演示参见Unicode regex文档:https://javascript.info/regexp-unicode