正则表达式在文本中查找英文字符需要超过3个

时间:2017-09-30 10:47:21

标签: regex

我想验证一个需要超过3个[aA-zZ]字符的文本,不需要连续。

/^(?![_\-\s0-9])(?!.*?[_\-\s]$)(?=.*[aA-zZ]{3,})[_\-\sa-zA-Z0-9]+$/.test("aaa123") =>返回true; /^(?![_\-\s0-9])(?!.*?[_\-\s]$)(?=.*[aA-zZ]{3,})[_\-\sa-zA-Z0-9]+$/.test("a1b2c3") =>返回false;

有人能帮助我吗?

3 个答案:

答案 0 :(得分:0)

您需要对.*[a-zA-Z]进行分组,以便在英文字母之间允许使用可选的任意字符:

^(?![_\-\s0-9])(?!.*?[_\-\s]$)(?=(?:.*[a-zA-Z]){3,})[_\-\sa-zA-Z0-9]+$
                                 ^^^         ^
                                    Add this

演示:

var re = /^(?![_\-\s0-9])(?!.*?[_\-\s]$)(?=(?:.*[aA-zZ]){3,})[_\-\sa-zA-Z0-9]+$/;
console.log(re.test("aaa123"));
console.log(re.test("a1b2c3"));

顺便说一下,[aA-zZ]不是正确的范围定义。请改用[a-zA-Z]。有关详细信息,请参阅here

答案 1 :(得分:0)

如何更换和计算?

var hasFourPlusChars = function(str) {
    return str.replace(/[^a-zA-Z]+/g, '').length > 3;
};

console.log(hasFourPlusChars('testing1234'));
console.log(hasFourPlusChars('a1b2c3d4e5'));

答案 2 :(得分:0)

正则表达式的更正

您的重复条件应包括"。*"。我没有检查你的正则表达式是否符合你想要达到的目的,但是这个修正适用于以下字符串:

$testStrings=["aaa123","a1b2c3","a1b23d"];
foreach($testStrings as $s)
   var_dump(preg_match('/^(?![_\-\s0-9])(?!.*?[_\-\s]$)(?=.*[a-zA-Z]){3,}[_\-\sa-zA-Z0-9]+$/', $s));

其他实现

由于语言似乎是JavaScript,因此这是针对您想要实现的目标的优化实现:

"a24be4Z".match(/[a-zA-Z]/g).length>=3

我们获取所有匹配的列表并检查是否至少有3个。 那不是最快的"因为需要创建结果。 )

/(?:.*?[a-zA-Z]){3}/.test("a24be4Z")

更快。 " *&#34?;避免"测试"在测试其他组合之前,method会匹配字符串末尾的所有字符。

正如预期的那样,第一个建议(计算匹配数)是最慢的。 检查https://jsperf.com/check-if-there-are-3-ascii-characters