如何允许所有语言的常规字母/字符(在字符串中)同时阻止特殊字符

问题描述 投票:0回答:2

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

我真正想要的是允许用户拥有一个仅包含有效字符的用户名(配置文件名称),在我的例子中,是所有语言的字母以及空格。但同时防止数字、符号(如

!@#$%^&*()|\/?'";:=+-_.<>,~
)、其他不常见的符号(如
©®♣♥♠♩¸¸♪·¯·♫
)、换行符、制表符和类似字符、表情符号以及每一个不常见的字符一个名字...

好吧,为了更清楚地说明,我想实现与 Facebook 完全相同的个人资料名称系统。

我正在使用 JS (Node),到目前为止我尝试了正则表达式,但我认为在该表达式中输入 unicode 中的每个有效字符范围是不明智的,是吗?当我将来需要编辑这些范围时,我什至不会尝试思考这会给我带来什么......

是否有任何库可以提供准确的方法?如果没有,我还有什么其他选择?

如有任何帮助,我们将不胜感激!

javascript node.js regex validation unicode
2个回答
7
投票

仅对于英语,您可以使用简单的字符类,例如

/^[a-zA-Z ]$/
或单词 char
/^[\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 正则表达式的文档:https://javascript.info/regexp-unicode


0
投票

我写信是为了报告涉及我的帐户的欺诈交易 不幸的是,未经授权的资金已通过 RTGS 从我的账户转移到另一个人的账户 我恳请您紧急协助解决此问题,并采取必要措施防止进一步的未经授权的交易 我是尊贵客户 RTGS 银行 ke 电话号码 253000 我想通知您,请调查退款 请考虑采取行动,请确保我给予积极的回应

© www.soinside.com 2019 - 2024. All rights reserved.