我尝试了一个以任何顺序接受 3 位数字的正则表达式,希望它能起作用。这是我的示例代码:
^(?:\D*\d){3}\D*$
它接受这样的字符串:abc123, a2v1c3, 123agc
我现在的问题是当我组合接受至少 3 个字母和 3 个数字的代码时。我尝试了许多正则表达式的组合,但我未能实现正确的正则表达式。有谁知道如何编写正确的正则表达式,以任何顺序接受至少 3 个字母和 3 个数字?先感谢您。
我尝试了一个以任何顺序接受 3 位数字的正则表达式,希望它能起作用。这是我的示例代码:
^(?:\D*\d){3}\D*$
它接受这样的字符串:abc123, a2v1c3, 123agc
我现在的问题是当我组合接受至少 3 个字母和 3 个数字的代码时。我尝试了许多正则表达式的组合,但我未能实现正确的正则表达式。有谁知道如何编写正确的正则表达式,以任何顺序接受至少 3 个字母和 3 个数字?先感谢您。
您可以使用组合前瞻来确保每个类中至少有三个在没有消耗的情况下得到满足。然后,使用限制的所有有效字符。
/(?=.*[a-z].*[a-z].*[a-z].*)(?=.*\d.*\d.*\d.*)[a-z0-9]{6,}/
它很丑,但比我能想到的唯一选择要漂亮得多;
/\d{3}[a-z]{3}|\d{2}[a-z]{3}\d|\d{1}[a-z]{3},\d{2} ...
我认为对于这样的事情,你需要有一些计数功能,如果我没记错的话,它不是由正则表达式引擎提供的(通常的{min, max}
运算符除外)。
您可以做的是拥有 2 个正则表达式,一个用于字母,一个用于数字(大多数编程语言提供 aisDigit
和isLetter
功能,因此您也可以使用它们)并具有某种计数器。这样做而不是正则表达式将产生更清晰、更易于维护和理解的代码。
您可以通过两个积极的前瞻来做到这一点:
/(?=(?:.*\d){3})(?=(?:.*[a-z]){3})^[a-z\d]*$/
寻找至少 3 位数字:
(?=(?:.*\d){3})
寻找至少 3 个字母:
(?=(?:.*[a-z]){3})
定义开始和结束之间允许的内容:
^[a-z\d]*$/