我必须编写regex来检查string:
我感谢任何帮助,因为我真的很困惑,并且没有任何想法如何解决这个问题。
答案 0 :(得分:5)
您可以使用预先检查所有条件,然后匹配5到15个字符(任意),确保没有其他内容(^
和$
):
^(?=(?:.*[A-Z]){2})(?=(?:.*[a-z]){2})(?=.*\d).{5,15}$
^
:字符串的开头(?= )
:积极向前看。不抓取任何字符,但只是向前看,看模式是否匹配(?: )
:使此群组无法捕获,即您不会将其作为捕获群体,您可以使用$1
或\1
(取决于语言).*[A-Z]
:0个或多个字符后跟大写字母.*[a-z]
:0个或多个字符后跟小写字母.*\d
:0个或多个字符后跟数字{2}
:之前的模式必须匹配两次.{5-15}
:5到15个字符。$
:字符串结尾在JavaScript中,您可以使用test
针对正则表达式测试字符串,例如:
var regex = /^(?=(?:.*[A-Z]){2})(?=(?:.*[a-z]){2})(?=.*\d).{5,15}$/;
console.log(regex.test('a9B1c')); // false, missing capital letter
console.log(regex.test('a9B1cD')); // true

答案 1 :(得分:0)
trinctot是正确的,但取决于谁在使用您的代码以及为什么,这可能更容易维护/修改:
var lowerPass = 2 <= (string.match(/[a-z]/g) || []).length;
var upperPass = 2 <= (string.match(/[A-Z]/g) || []).length;
var digitPass = 1 <= (string.match(/[0-9]/g) || []).length;
var lengthPass = 5 <= string.length <= 15;
var stringPass = lowerPass + upperPass + digitPass + lengthPass == 4;
答案 2 :(得分:0)
尝试一下
^([a-z]{2,}[A-Z]{2, }[0-9]{1}+) {5, 15}$