我想验证一个需要超过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;
有人能帮助我吗?
答案 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。