gpt4 book ai didi

javascript - 需要一些关于正则表达式验证的指示

转载 作者:行者123 更新时间:2023-12-03 22:46:46 25 4
gpt4 key购买 nike

给定一个字符串,它必须具有以下内容:

  1. 只有一个号码
  2. (@#$*)中只有一个特殊字符
  3. 6个小写字母

字符串可以是以上条件的任意组合,长度必须是8。

例子:

  1. 2@qwerty
  2. 1asddfg

  3. qwe*yt2u
  4. qw2wqia

到目前为止,这是我的正则表达式:

!/^(?=.*[0-9])(?=.*[^a-z])(?=.*[a-z])(?=.*[@#$*])\S{8,}$/.test(string)

它适用于上述情况,但在以下情况下会中断:

  1. 2@2qwert
  2. 2@@qwert

我错过了什么?

最佳答案

What am I missing?

您的测试 '2@2qwert' 和 '2@@qwert' 与您的正则表达式匹配不正确的原因是因为其中没有任何内容需要至少 6 个小写字母。根据对这个问题的其他答案和评论,我会说用 (?=(.*?[a-z]){ 6})

可以进行的其他一些小改进:

  • 您可以删除多余的 (?=.*[^a-z]) 子句,因为所有这一切都是说字符串应该至少包含 1 个非字母,这已经由数字和特殊字符要求。
  • 将 [0-9] 替换为\d。
  • 在字符匹配 (.*) 之前匹配通配符的 3 个位置中,如果将这些设置为非贪婪的,则 RegExp 引擎的速度会稍快一些,这样在搜索字符串时回溯就会更少一场比赛。这是通过放置一个 ?在 * (.*?) 之后。

根据您的正则表达式将其放在一起:

/^(?=.*?\d)(?=(.*?[a-z]){6})(?=.*?[@#$*])\S{8,}$/

这成功匹配了您的前 4 个字符串,但不匹配后 2 个。

(如果您想要可读的验证函数,我的原始回复如下。)

function validate(str)
{
// test for digit
if( !/\d/.test(str) ) return false;
// test for special character
if( !/[@#$*]/.test(str) ) return false;
// test for 6 lowercase letters
var letters = str.match(/[a-z]/g);
return letters != null && letters.length == 6;
}

var tests = [ '2@qwerty', '#1asddfg', 'qwe*yt2u', '#qw2wqia', '2@2qwert', '2@@qwert' ];
for( var i=0 ; i<tests.length ; ++i )
document.writeln(tests[i] + ": " + validate(tests[i]) + "<br/>\n");

关于javascript - 需要一些关于正则表达式验证的指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com