我无法找出满足所有这些要求的javascript正则表达式:
该字符串只能包含下划线和字母数字字符。 它必须以字母开头,不包括空格,不以下划线结尾,并且不包含两个连续的下划线。
这是我来的,但是不包含连续的下划线'部分是最难添加的。
^[a-zA-Z][a-zA-Z0-9_]+[a-zA-Z0-9]$
答案 0 :(得分:6)
您可以使用多个前瞻(在这种情况下为neg。):
^(?!.*__)(?!.*_$)[A-Za-z]\w*$
<小时/>
细分说明:
^ # start of the line
(?!.**__) # neg. lookahead, no two consecutive underscores
(?!.*_$) # not an underscore right at the end
[A-Za-z]\w* # letter, followed by 0+ alphanumeric characters
$ # the end
<小时/> 正如
JavaScript
摘要:
let strings = ['somestring', '_not_this_one', 'thisone_', 'neither this one', 'but_this_one', 'this__one_not', 'this_one__yes']
var re = /^(?!.*__)(?!.*_$)[A-Za-z]\w*$/;
strings.forEach(function(string) {
console.log(re.test(string));
});
请不要限制密码!
答案 1 :(得分:3)
您也可以使用
^[a-zA-Z]([a-zA-Z0-9]|(_(?!_)))+[a-zA-Z0-9]$
与正则表达式相比,唯一的变化是将[a-zA-Z0-9_]
更改为[a-zA-Z0-9]|(_(?!_))
。我从字符集中删除了下划线,如果它没有跟随另一个,则允许它在替代的第二部分。
(?!_)
是负面预测意味着_
不能成为下一个字符
答案 2 :(得分:1)
^[a-z](?!\w*__)(?:\w*[^\W_])?$
^
断言位置为行的开头[a-z]
匹配任何小写的ASCII字母。下面的代码添加了i
(不区分大小写)标志,因此这也匹配大写变量(?!\w*__)
否定前瞻确保字符串(?:\w*[^\W_])?
可选择匹配以下内容
\w*
匹配任意数量的字符[^\W_]
匹配除_
以外的任何字词。解释:匹配任何_
(因为它在否定集中)。$
断言行尾的位置
let a = ['somestring', '_not_this_one', 'thisone_', 'neither this one', 'but_this_one', 'this__one_not', 'this_one__yes']
var r = /^[a-z](?!\w*__)(?:\w*[^\W_])?$/i
a.forEach(function(s) {
if(r.test(s)) console.log(s)
});