用于过滤不需要的用户名的正则表达式
在我正在开发的网站上,我要求用户名不能以
开头,
因此不应允许这些:
- SU_Coolguy
- MR_Nobody
- my_Pony
但这些应该没问题:
- __SU_Coolguy
- MRS_Nobody
- YourPony
在我使用的框架中,我只能验证匹配的正则表达式,而不能验证不匹配的情况。到目前为止我已经想出了这个:
"/^([^A-Za-z0-9]{2}\_|[A-Za-z0-9]{3,27})/"
这适用于大多数项目,但在“__SU_Coolguy”上失败。
对此正则表达式的任何帮助将不胜感激。 :)
On a site I am working on I have a requirement that usernames not start with <alpha><alpha>_
So these should not be allowed:
- SU_Coolguy
- MR_Nobody
- my_Pony
But these should be ok:
- __SU_Coolguy
- MRS_Nobody
- YourPony
In the framework I am using, I am only able to validate against matching regular expression, not non-matching. So far I have come up with this:
"/^([^A-Za-z0-9]{2}\_|[A-Za-z0-9]{3,27})/"
This works for most items, but fails on "__SU_Coolguy".
Any help on this regex would be highly appreciated. :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这使用 负向预测:
^(?![A-Za- z]{2}_)[A-Za-z0-9_]{3,27}$
让我们分解一下:
This uses a negative lookahead:
^(?![A-Za-z]{2}_)[A-Za-z0-9_]{3,27}$
Lets break it down:
您的正则表达式将为
/^(?![a-zA-Z0-9]{2}_)/
。它的意思是“以不是{两个字母数字字符和一个下划线}开头”。Your regex would be
/^(?![a-zA-Z0-9]{2}_)/
. It means "start with not {two alphanumeric characters and an underscore}".只需输入一个否定断言,如下所示:
这是一个完整的测试用例:
输出如下:
Just put in a negative assertion, like this:
Here is a full test case:
which outputs this:
在这种情况下,一个简单的方法是将其分成不同的情况:用户名要么以非字母开头,要么以字母和非字母开头,要么以两个字母和非下划线开头,大致如下:
A simple way in this case is just to break it into cases: the username either starts with a non-alpha, or an alpha and a non-alpha, or two alphas and non-underscore, so roughly like: