如何允许所有语言的常规 letters/characters(在字符串中)同时防止特殊字符
How to allow regular letters/characters of all languages (in a string) while prevent special characters
首先这不是重复的(据我所知)。
我真正想要的是允许用户拥有一个仅包含有效字符的用户名(个人资料名称),在我的例子中,这些字符是所有语言的字母以及空格。但同时要防止数字、符号(如 !@#$%^&*()|\/?'";:=+-_.<>,~
)、其他不常见的符号(如 ©®♣♥♠♩¸¸♪·¯·♫
)、换行符、制表符和类似字符、表情符号以及每一个不正常的字符在名字中看到...
好吧,为了更清楚,我想实现与 Facebook 完全相同的个人资料名称系统。
我正在使用 JS (Node),到目前为止我尝试了正则表达式,但我不认为在该表达式中键入 unicode 中的每个有效字符范围是明智的,是吗?!当我需要编辑这些范围时,我什至不会去想这会对我造成什么影响...
是否有任何库提供了一种方法来做到这一点?如果不是,我还有什么其他选择?
感谢任何帮助!
对于英语,您可以使用一个简单的字符 class,例如 /^[a-zA-Z ]$/
或单词字符 /^[\w ]$/
。有一个 Unicode 等价物:
/^[\p{L}\p{M}\p{Zs}]{2,30}$/u
解释:
- 使用 'u' 标志启用 Unicode
\p{L}
- 表示任何语言中的字母字符
\p{M}
- 表示标记(重音符号等)
\p{Zs}
- 表示 space 字符,例如常规 space
和日语 space 字符
如果您想在开始和结束时阻止 space,请使用这些否定前瞻:
/^(?!\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 正则表达式的文档:https://javascript.info/regexp-unicode
首先这不是重复的(据我所知)。
我真正想要的是允许用户拥有一个仅包含有效字符的用户名(个人资料名称),在我的例子中,这些字符是所有语言的字母以及空格。但同时要防止数字、符号(如 !@#$%^&*()|\/?'";:=+-_.<>,~
)、其他不常见的符号(如 ©®♣♥♠♩¸¸♪·¯·♫
)、换行符、制表符和类似字符、表情符号以及每一个不正常的字符在名字中看到...
好吧,为了更清楚,我想实现与 Facebook 完全相同的个人资料名称系统。
我正在使用 JS (Node),到目前为止我尝试了正则表达式,但我不认为在该表达式中键入 unicode 中的每个有效字符范围是明智的,是吗?!当我需要编辑这些范围时,我什至不会去想这会对我造成什么影响...
是否有任何库提供了一种方法来做到这一点?如果不是,我还有什么其他选择?
感谢任何帮助!
对于英语,您可以使用一个简单的字符 class,例如 /^[a-zA-Z ]$/
或单词字符 /^[\w ]$/
。有一个 Unicode 等价物:
/^[\p{L}\p{M}\p{Zs}]{2,30}$/u
解释:
- 使用 'u' 标志启用 Unicode
\p{L}
- 表示任何语言中的字母字符\p{M}
- 表示标记(重音符号等)\p{Zs}
- 表示 space 字符,例如常规 space
如果您想在开始和结束时阻止 space,请使用这些否定前瞻:
/^(?!\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 正则表达式的文档:https://javascript.info/regexp-unicode