【问题标题】:Testing characters from many languages using regex使用正则表达式测试多种语言的字符
【发布时间】:2017-04-17 21:39:37
【问题描述】:

对于我的网站,我正在为我的用户植入用户名。我正在查看 Snapchat 的用户名验证规则来指导我一些最佳实践,它们具有以下内容:

Must be 3-15 characters long
Can’t contain spaces
Must begin with a letter
Can only contain letters, numbers, and the special characters hyphen ( - ), underscore ( _ ), and period ( . ), EXCEPT that the username:
Can’t begin with a number, hyphen, underscore, or period
Can’t end with a hyphen, underscore, or period
Can’t contain emojis or other symbols such as @, $, #, etc.
Will appear only in lower-case letters within the app

这让我思考这如何适用于我遍布世界各地的用户。当Must begin with a letter 之类的要求如何使用正则表达式进行检查时,所有语言的所有字母都通过,但同时表情符号或“奇怪”字符等内容失败?

【问题讨论】:

  • 您将从\p{L} 开始,然后从那里开始。这将用什么语言完成?顺便说一句,表情符号具有欺骗性。
  • 实际上,要在 Unicode 中完成这一切,需要重写这些规则以包含更多/更少的字符。它似乎主要以 ascii 为中心(表情符号除外)。
  • 编程语言?
  • @PedroLobito 我正在编写一个移动应用程序(Java/Swift)和一个 Nodejs 后端(Javascript)。前端和后端都在进行验证以确保用户名正确。

标签: javascript regex internationalization


【解决方案1】:

你可能需要这样的东西:

(?=[\p{L}\d_\-.]{3,13})^[\p{L}](?=.*?[^ ])[\p{L}\d_\-.]+[\p{L}\d]$

Regex Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2023-03-22
    • 2013-03-27
    • 2014-10-20
    • 1970-01-01
    • 2016-12-14
    • 2019-07-26
    相关资源
    最近更新 更多