如何允许所有语言的常规字母/字符(在字符串中),而不允许特殊字符



首先这不是重复的(据我所知)。

我真正想要的是允许用户有一个只包含有效字符的用户名(配置文件名称),在我的情况下,是所有语言的字母,以及空格。但同时要防止数字、符号(如!@#$%^&*()|/?'";:=+-_.<>,~)、其他不常见的符号(如©®♣♥♠♩¸¸♪·¯·♫)、换行符、制表符和类似的字符、表情符号,以及每一个不正常出现在名字中的字符……

嗯,为了更清楚,我想实现与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

相关内容

  • 没有找到相关文章

最新更新