[英]Regex Javascript, negative lookahead with white space
在我的Javascript angular应用程序中,我有一个正则表达式来验证用户名。
经过大量研究后,我面临的问题是,对包含空格的表达式使用负前瞻是行不通的。
用户名可以由最多由一个空格分开的许多字母数字字符串组成。 边缘处不允许有空格。 用户名也应根据几个禁止的名称进行过滤。
(/^[a-zA-Z\d]+([\s][a-zA-Z\d]+)+?$/).test("admin may not be used")
允许一次将字母数字单词分开一个随后的空格,并禁止在边缘保留空格
(/^(?!(?:admin|alfred)$)[a-zA-Z\d]+$/).test("admin")
可行,并且不允许使用单词admin
(/^(?!(?:admin|alfred)$)[a-zA-Z\d]+([\s][a-zA-Z\d]+)+?$/).test("admin may not be used")
失败! 并允许使用被禁止的单词admin。
这两个过滤器都可以正常工作,即被禁止的单词列表以及后续的空间过滤器。 您能指出我的表情可能有问题吗?
您可以考虑使用
/^(?!.*\b(?:admin|alfred)\b)[a-zA-Z\d]+(?:\s[a-zA-Z\d]+)+$/
或更长一些,效率更高(但可读性更差):
/^(?!(?:admin|alfred)\b)[a-zA-Z\d]+(?:\s(?!(?:admin|alfred)\b)[a-zA-Z\d]+)+$/
如果允许使用一个单词的用户名,请用?替换最后的+
(1个或多个重复) ?
(1或0个重复)量词( demo )。
如果您在AngularJS中使用它,还请使用ng-trim="false"
以确保不允许前导和尾随空格。
图案细节 :
^
-字符串开头 (?!.*\\b(?:admin|alfred)\\b)
-零个或多个字符( .*
)之后,不能将admin
或alfred
视为整个单词(否则,正则表达式将返回false) [a-zA-Z\\d]+
-1个或更多字母数字 (?:
-开始非捕获组
\\s
空格 [a-zA-Z\\d]+
-1个或更多字母数字 )+
-非捕获组的末端,将重复1次或更多次 $
-字符串结尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.