类似电报的用户名的正则表达式

Regex for telegram-like username

提问人:George Alexander 提问时间:8/1/2023 更新时间:8/1/2023 访问量:255

问:

我正在构建消息传递应用程序,在注册新用户时需要正则表达式来验证用户名。 用户名长度必须至少为 5 个字符(该长度的不少于 3 个字符必须为字母),不能有空格,并且只能由 a-z、0-9 和下划线组成。

const valid = new RegExp(...);

const username_a = "john_doe";
const username_b = "johndoe";
const username_c = "John Doe";
const username_d = "john.doe";
const username_e = "john";

valid.test(username_a) = true;
valid.test(username_b) = true;
valid.test(username_c) = false;
valid.test(username_d) = false;
valid.test(username_e) = false;

我不熟悉正则表达式构建,所以请帮忙!

JavaScript 正则表达式 验证

评论

2赞 Armali 8/1/2023
为什么选择正则表达式
0赞 George Alexander 8/1/2023
我想不出任何其他方法来验证 javascript 中的字符串,如果存在的话,可能会有一些 npm 包。
1赞 Pushpesh Kumar Rajwanshi 8/1/2023
您可以使用^(?=(?:[0-9_]*[a-z]){3})[a-z0-9_]{5,}$

答:

1赞 Alexander Nenashev 8/1/2023 #1

正如 Pushpesh 的评论中所建议的:

const valid = /^(?=(?:[0-9_]*[a-z]){3})[a-z0-9_]{5,}$/;

const names = 'john_doe,johndoe,j2e2p2,John Doe,john.doe,johh,joh2_23,jo2e_234,jo23_22'.split(',');

for(const name of names){
  console.log(name, valid.test(name));
}

评论

0赞 George Alexander 8/1/2023
谢谢,正是我一直在寻找的!
0赞 Alexander Nenashev 8/1/2023
@GeorgeAlexander不确定,无法验证。思维。。。j2e2p2
1赞 Pushpesh Kumar Rajwanshi 8/1/2023
这适用于所有情况^(?=(?:[0-9_]*[a-z]){3})[a-z0-9_]{5,}$
0赞 Alexander Nenashev 8/1/2023
@PushpeshKumarRajwanshi不错,更新了我的答案,免费填写以发布答案,我将删除我的答案。只需发表评论通知我
2赞 Pushpesh Kumar Rajwanshi 8/1/2023
@AlexanderNenashev:一切都很好,因为你已经用正确的答案更新了你的答案。