我写了这样的regex
/(?=.*[a-z])(?!.*[A-Z])([\w\_\-\.].{3,10})/g
检查以下条件
>has minimum of 3 and maximum of 10 characters.
>must contain atleast a lowercase alphabet.
>must contain only lowercase alphabets, '_', '-', '.' and digits.
这个方法可行,但即使有超过10个字符也会返回true。
我想用一个新的或修改过的正则表达式来检查上面给出的条件。
办法有很多。我相信共同的特点是他们都会有一个积极的展望。下面是另一种。
^(?=.{3,10}$)[a-z\d_.-]*[a-z][a-z\d_.-]*$
请注意 [a-z\d_.-]*
出现两次。有些regex引擎支持子程序(或子表达式),允许人们将regex的重复部分保存到一个编号或命名的捕获组中,以便以后在字符串中重复使用。例如,当使用PCRE引擎时,您可以写下以下内容
^(?=.{3,10}$)([a-z\d_.-]*)[a-z](?1)$
(?1)
被保存到捕获组1的匹配字符串的regex标记所取代 ([a-z\d_.-]*
),与之形成对比的是 \1
,它引用了捕获组1的内容。 使用子程序可以缩短regex的表达式,但更重要的是它减少了对regex的标记进行重复修改时出错的机会。