【发布时间】:2020-07-02 15:33:05
【问题描述】:
我是正则表达式的新手,想创建一个正则表达式来检查用户名。 这些是条件:
- 用户名的长度必须在 4 到 20 个字符之间
- 用户名只能包含字母 a-z、数字 0-9 和特殊字符 -._
- 特殊字符 -._ 不得连续使用,以免混淆
- 用户名不得包含空格
示例
- any.user.13 => 有效
- any..user13 => 无效(连续两个点)
- 任何用户 => 有效
- any => 无效(太短)
- anyuserthathasasupersuperlonglongname => 无效(字符过多)
- 任何用户名 => 因为空格而无效
我尝试创建我自己的正则表达式,但只到了指定允许字符的地步:
[a-z0-9.-_]{4,20}
不幸的是,如果中间有空格,它仍然匹配一个字符串,并且可能有两个特殊字符 .-_ 连续:
如果有人能就这个问题向我提供帮助,我将不胜感激。请记住,我是正则表达式的新手,并且仍在学习它。因此,对您的正则表达式的解释会很棒。
提前致谢:)
【问题讨论】:
-
最简单的方法是提供一个您逐一测试的规则列表。通过使用这种方法,您可以让用户知道他违反了哪些规则。
-
好吧,我选择了一种向用户显示消息的方法,该消息指定用户名无效的原因可能是什么。使用 ifs 进行此类检查很乏味...
-
严肃的问题:你为什么要对用户名施加所有这些限制?除了可能是最大长度(因为 varchar 也不应该特别重要),您对所有这些限制有什么真正的原因? (例如,您用于显示用户名的代码不应该关心。它可能会切断用户名,但您应该在人们注册时简单地告诉他们。“选择长用户名意味着人们不会看到整个事情”)
-
@Mike'Pomax'Kamermans 因为这样做很常见。例如,根据使用的字体,用户无法识别 my__username 有两个下划线。此外,这些规则会阻止用户创建像 _________name____ 这样的用户名
-
“其他人这样做”并不是真正的原因。大量的网站都这样做,作为用户,这很痛苦=)如果有人想要用户名
__,那么只要你的前端清楚什么是用户名,什么不是,那没有什么问题用户名,记住这一点很重要。想要限制它是好的,但是很多“常见做法”都是基于几十年前的技术限制,如果你正在编写新的东西,实际上这些都不适用。
标签: javascript regex