javascript 正则表达式|限制可能的用户名

31moq8wy  于 2023-03-06  发布在  Java
关注(0)|答案(7)|浏览(172)
    • 问题**

以下是用户在创建用户名时必须遵循的一些简单规则。
1)用户名只能使用字母数字字符。
2)用户名中的唯一数字必须位于末尾。末尾可以有零个或多个数字。用户名不能以数字开头。
3)用户名字母可以是小写和大写。
4)用户名长度必须至少为两个字符。两个字符的用户名只能使用字母作为字符。

    • 我的代码**
let username = "JackOfAllTrades";
let userCheck = /^(a-za-z|a-z(a-z+|\d\d+))(\d*)$/i; 
let result = userCheck.test(username);
    • 我的问题**

我该如何修复此代码?为什么此代码不起作用?

o75abkj4

o75abkj41#

    • 解决方案1:**
let username = "JackOfAllTrades";
let userCheck = /^[a-z]([0-9][0-9]+|[a-z]+\d*)$/i;
let result = userCheck.test(username);
    • 代码说明**
  • ^-输入开始
  • [a-z]-第一个字符是字母
  • [0 - 9][0 - 9]+-以两个或多个数字结尾
  • |- 或
  • [a-z]+-后面有一个或多个字母
  • \d *-并且以零个或多个数字结尾
  • $-输入结束
  • i-忽略输入的大小写
    • 解决方案2:**
let username = "JackOfAllTrades";
const userCheck = /^[a-z]([0-9]{2,}|[a-z]+\d*)$/i;
let result = userCheck.test(username);
    • 代码说明**
  • ^-输入开始
  • [a-z]-第一个字符是字母
  • [0 - 9] {2,0}-以两个或多个数字结尾
  • |- 或
  • [a-z]+-后面有一个或多个字母
  • \d *-并且以零个或多个数字结尾
  • $-输入结束
  • i-忽略输入的大小写
vqlkdk9b

vqlkdk9b2#

下面是我的解决方案:

/^[a-z][a-z]+$|^[a-z]+\w\d+$/i

/^-在字符串的开头,查找
[a-z][a-z]+$-至少2个字母,可以更多,直到结尾(这意味着像test12这样的字符串在这个字符串中不会通过)
| - OR(对于包含更多数字和超过2个字符的情况,^[a-z]+-以任意字母开头,可以更多
\w-任意字符,可以是a-z和0 - 9,它用于强制字符串至少包含3个字符
\d +$-以至少有一个数字的链结尾(如果它的结尾没有至少一个数字,则它将在条件的第一个中匹配)
/i-考虑大写字符

nwo49xxi

nwo49xxi3#

编辑:我遗漏了OP要求中的一些内容:如果用户名长度超过2个字符,则只能有一个前导字母。因此,我相应地更正了这个答案,我们基本上得到了与Venkatesh的解决方案2相同的正则表达式。

我猜你只希望输入非重音字符。
使用正则表达式/^[a-z]([a-z]+\d*|\d{2,})$/itest it here),您会得到以下匹配/失败结果(逐个测试时):

• Paul46:  matches
• 4frank:  fails
• mike:    matches
• jus6tin: fails 
• p87:     matches
• k9:      fails
• AL10:    matches
yftpprvb

yftpprvb4#

试试这个:

let userCheck = /^[a-z]([a-z]+|[a-z]*[\d][\d])$/i;
b1payxdu

b1payxdu5#

let userCheck = /^[a-z]([a-z]+|[0-9]\d+)\d*$/i;

以上通过了此problem的所有测试用例

2nc8po8w

2nc8po8w6#

下面的解决方案可以很好地根据以下条件查找用户名用户名只能使用字母数字字符。
1.用户名中的唯一数字必须位于末尾。末尾可以有0个或2个以上的数字。用户名不能以数字开头。
1.用户名字母可以是小写和大写。
1.用户名长度必须至少为两个字符。两个字符的用户名只能使用字母作为字符。

let username = "JackOfAllTrades";
let userCheck = /^[a-z]+(\d\d+$|[a-z]+\d*$)/i; // Change this line
let result = userCheck.test(username);
console.log(result)

产品名称:*

  1. ^[a-z]+-匹配beginning(^)中的一个或多个(+)alphabet([a-z])
  2. \d\d+$-如果开头只有一个字母表,则匹配结尾的2个或多个(\d表示一个,\d+表示一个或多个)数字。
  3. [a-z]+\d*$-匹配一个或多个字母表以及末尾的0个或多个数字。
  4. i-忽略字母大小写的标志
  5. |-选择匹配两个正则表达式的符号
svmlkihl

svmlkihl7#

此解决方案行之有效:

/^\D([a-z]+\d*|\d{2,})$/i
    • 说明:**

^\D-不能以数字开头
$-输入结束
[a-z]+\d*-后面有一个或多个字母,结尾为零个或多个数字
|-或
\d{2,}-以两个或多个数字结尾
/i-可以是小写和大写

相关问题