我遇到麻烦模式匹配,我试图生成模式,可以接受只有数字或字母数字与'-
'和'_
'允许但不是数字与'-
'和'-
'允许,只有'-
'和'_
'不应该被允许。
我试过下面的一个有点工作但完全正常工作。
^[a-zA-Z0-9][a-zA-Z0-9-_]+$
我试图匹配以下情况:
abcd = OK
as123 = Ok
as_as = Ok
as_12 = Ok
as-as = ok
12as = Ok
12_1as = Ok
123_12 = not Ok
12-12 = not Ok
1234 = ok
-- = not ok
__ = not ok
提前致谢
这样做的工作:
var test = [
'abcd',
'as123',
'as_as',
'as_12',
'as-as',
'12as',
'12_1as',
'123_12',
'12-12',
'1234',
'--',
'__',
];
console.log(test.map(function (a) {
return a+' : '+/^(?!\d+[-_]\d+$)[a-z0-9]+[-_]?[a-z0-9]+$/i.test(a);
}));
说明:
^ : begining of string
(?! : negative lookahead, make sure we don't have
\d+ : 1 or more digits
[-_] : - or _
\d+ : 1 or more digits
$ : end of string
) : end lookahead
[a-z0-]+ : 1 or more alphanumeric character
[-_]? : optional - or _
[a-z0-]+ : 1 or more alphanumeric character
$ : end of string