检查用户名是不是有来自名称的 4 个连续字母 - javascript

Posted

技术标签:

【中文标题】检查用户名是不是有来自名称的 4 个连续字母 - javascript【英文标题】:Check if username has 4 consecutive letters from name - javascript检查用户名是否有来自名称的 4 个连续字母 - javascript 【发布时间】:2021-03-18 12:30:01 【问题描述】:

我正在尝试构建一个注册表单,用户必须在其中输入他们的用户名和他们的名字。为了增加安全性并遵循隐私要求,我需要不允许用户输入他们的名字作为他们的用户名。 (名称中至少有 4 个连续的字母)。

例如1-

姓名 = John Doe

用户名 = JohnUser 或 NdoeUser

例如2-

姓名 - 约翰尼英语

用户名 - JohnEng123 或 English321 或yeng321

上面的例子应该会提示错误。第一个是 John 作为 4 个连续的字母,第二个是名字和姓氏的最后一个字符作为 4 个连续的字母。

我想知道这是否可以通过正则表达式实现,或者我是否必须遍历每个字符或 4 个字符集并检查其是否存在于用户名中。

【问题讨论】:

为什么不希望用户的名字出现在Username 如果您选择更长的名称,例如 Johnny,该示例的歧义就会减少。 用户名大多是公共信息,限制格式没有用。而是检查密码是否符合安全标准。 这是该站点的要求,因为该站点保存了对隐私至关重要的特定用户组的信息。我们已经有了需要特定清单的密码,但这也出现了,我想知道是否有更好的方法而不是逐个字符。 【参考方案1】:

您可以创建name 的模式并获取一个字母和后面三个字母的正则表达式,例如

/J(?=ohn)|o(?=hnD)|h(?=nDo)|n(?=Doe)/i

并返回检查的否定结果。

function check(name, login) 
    let pattern = [];
    name = name.replace(/\s+/, '');    
    for (let i = 0, l = name.length - 3; i < l; i++) 
        pattern.push(`$name[i](?=$name.slice(i + 1, i + 4))`);
    

    return !new RegExp(pattern.join('|'), 'i').test(login);


console.log(check('John Doe', 'JohnUser'));
console.log(check('John Doe', 'NdoeUser'));
console.log(check('Johnny English', 'JohnEng123'));
console.log(check('Johnny English', 'English321'));
console.log(check('Johnny English', 'yeng321'));
console.log(check('foo bar', 'abcdefg'));

【讨论】:

啊,谢谢你.. 我会试一试,让你知道一切进展如何 :) .. 非常感谢。

以上是关于检查用户名是不是有来自名称的 4 个连续字母 - javascript的主要内容,如果未能解决你的问题,请参考以下文章

检查用户输入是不是是字母

检查密码,验证,然后再次循环

检查 char 是不是不等于字母表的前 6 个字母

如何检查图像资产是不是存在,然后将其用作圆形头像或在圆形头像中写下姓名的第一个字母

如何检查表列中的三个日期是不是连续月份

某字符串可能包含26个英文字母,可能包含6种符号,可能包含3个数字,统计他们出现的个数