我正在尝试验证用户名。我想要一个正则表达式,
- 长度至少为 4 个字符。
- 必须仅包含字母、数字和可选的下划线
- 它不得以下划线结尾
- 它必须以字母开头
我试过正则表达式,
/^(?!_*_*_*)[A-Za-z]([A-Za-z0-9_]*[A-Za-z0-9])?$/
function validate(username) {
if ((/^(?!_*_*_*)[A-Za-z]([A-Za-z0-9_]*[A-Za-z0-9])?$/).test(username)) {
return true;
}
return false;
}
console.log(validate('hej_gd'));
- 长度至少为 4 个字符。
一开始,匹配(?=.{4})
以确保至少有 4 个字符
它必须以字母开头
首先将字母与[a-z]
匹配,然后
必须仅包含字母、数字和可选的下划线
它不得以下划线结尾
匹配零个或多个字母和数字,后跟可选的_
,后跟一个或多个字母和数字,[a-zd]*_?[a-zd]+
:
function validate(username) {
return /^(?=.{4})[a-z][a-zd]*_?[a-zd]+$/i.test(username);
}
console.log(
validate('hej_gd'),
validate('hej_'),
validate('_hej'),
validate('h_j'),
validate('h__j')
);
i
标志使您可以避免重复a-zA-Z
。
下划线不应与其他字符一起出现在字符集中,因为您的要求是它可能包含可选的下划线- 您希望确保下划线不超过 1 个,因此应该只有一个地方可以匹配(带有_?
(。
另一个版本来解决"它必须以字母开头">
function validate(username){
if (username === undefined || username === null)
return false;
return /^(?=.{4})[a-z]([_]?[a-zd]+)*$/i.test(username);
}