在javascript中使用正则表达式验证用户名
我是regex的新手,希望创建一个正则表达式来检查用户名这些是条件:在javascript中使用正则表达式验证用户名,javascript,regex,Javascript,Regex,我是regex的新手,希望创建一个正则表达式来检查用户名这些是条件: 用户名必须包含4到20个字符 用户名只能包含字母a-z、数字0-9和特殊字符-_ 为避免混淆,不得连续使用特殊字符-.u 用户名不能包含空格 示例 any.user.13=>有效 any..user13=>无效(连续两个点) anyuser=>有效 any=>无效(太短) AnyUserhasAsupersuperLongName=>无效(字符太多) 任何用户名=>都因空格而无效 我尝试创建自己的正则表达式,但只指定了允许
- any.user.13=>有效
- any..user13=>无效(连续两个点)
- anyuser=>有效
- any=>无效(太短)
- AnyUserhasAsupersuperLongName=>无效(字符太多)
- 任何用户名=>都因空格而无效
[a-z0-9.-_]{4,20}
不幸的是,如果中间有空格,它仍然匹配字符串,并且可能有两个特殊字符。-\uu依次:
如果有人能在这个问题上为我提供帮助,我将不胜感激。请记住,我是一个regex的新手,还在学习。因此,解释一下你的正则表达式就好了
提前感谢:)有时编写正则表达式几乎和查找用户名一样困难。但在这里,你离成功很近。我可以指出你的尝试失败的三个原因 首先,我们需要匹配所有输入字符串,而不仅仅是其中的一部分,因为我们不想忽略输入中出现的空格和其他字符。为此,通常将分别使用锚点
^
(匹配开始)和$
(匹配结束)
另一点是,我们需要防止两个特殊字符相邻出现。这最好是用消极的前瞻来完成
最后,我可以看到您用来测试正则表达式的工具添加了标志gmi
,这不是我们想要的。特别是,i
标志表示regex应该不区分大小写,因此它应该像小字母一样匹配大写字母。把那面旗子移开
最后的正则表达式如下所示:
/^([a-z0-9]|[-.[u](?![-.[u]){4,20}$/
这里没有什么真正神秘的东西,除了组
[-.\u](?![-.\ u])
这意味着任何-.\u
后面没有任何-.\u
有时编写正则表达式几乎和查找用户名一样具有挑战性。但在这里,你离成功很近。我可以指出你的尝试失败的三个原因
首先,我们需要匹配所有输入字符串,而不仅仅是其中的一部分,因为我们不想忽略输入中出现的空格和其他字符。为此,通常将分别使用锚点^
(匹配开始)和$
(匹配结束)
另一点是,我们需要防止两个特殊字符相邻出现。这最好是用消极的前瞻来完成
最后,我可以看到您用来测试正则表达式的工具添加了标志gmi
,这不是我们想要的。特别是,i
标志表示regex应该不区分大小写,因此它应该像小字母一样匹配大写字母。把那面旗子移开
最后的正则表达式如下所示:
/^([a-z0-9]|[-.[u](?![-.[u]){4,20}$/
这里没有什么真正神秘的东西,除了组
[-.\u](?![-.\ u])
这意味着任何-.\u
后面都没有任何-.\u
如果您提供一个规则列表,然后逐个进行测试,这是最简单的。通过使用这种方法,您可以让用户知道他违反了哪些规则。我选择了一种方法,向用户显示一条消息,指定用户名无效的原因。使用ifs进行这样的检查是乏味的……严肃的问题:为什么要对用户名设置所有这些限制?除了可能的最大长度(因为varchar也不应该特别重要),对于所有这些限制,您有什么真正的原因?(例如,你显示用户名的代码不应该在意。它可能会切断用户名,但你应该简单地告诉人们,当他们注册时。“选择长用户名意味着人们看不到全部”)@Mike'Pomax'Kamermans,因为这样做是常见的做法。例如,根据使用的字体,用户无法识别我的用户名有两个下划线。此外,这些规则阻止用户创建用户名,例如“其他人这样做”不是真正的原因。很多网站都这样做,这对用户来说是一件痛苦的事(如果有人想要用户名\uuuu
,那么只要你的前端清楚什么是用户名,什么不是用户名,用户名就没有问题,记住这一点很重要。想要限制它是可以的,但许多“常规做法”都是基于几十年前的技术限制,实际上,如果你正在写新的东西,这些限制都不适用。如果你提供一个规则列表,然后逐一测试,这是最简单的。通过使用这种方法,您可以让用户知道他违反了哪些规则。我选择了一种方法,向用户显示一条消息,指定用户名无效的原因。使用ifs进行这样的检查是乏味的……严肃的问题:为什么要对用户名设置所有这些限制?除了可能的最大长度(因为varchar也不应该特别重要),对于所有这些限制,您有什么真正的原因?(例如,你显示用户名的代码不应该在意。它可能会切断用户名,但你应该在人们注册时简单地告诉他们。)