正则表达式到包含字母数字字符的用户名,在 javascript 中最多包含一个下划线符号



我正在尝试验证用户名。我想要一个正则表达式,

  1. 长度至少为 4 个字符。
  2. 必须仅包含字母、数字和可选的下划线
  3. 它不得以下划线结尾
  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);
}

最新更新