Angularjs 最小8位20个字符的正则表达式

Angularjs 最小8位20个字符的正则表达式,angularjs,regex,ng-pattern,Angularjs,Regex,Ng Pattern,我目前正在寻找一个正则表达式来验证以下要求: 应至少包含8位数字(0-9) 在数字之间,允许使用其他字符(a-z)(也是大写) 它最多应包含20个字符(a-z 0-9) 示例: 12345678: true 123adafa45678: true 123ab456: false (needs atleast 8 digits, now only 6) ab12345a678: true ab123456789afgb2459a2: false (more then 20 character

我目前正在寻找一个正则表达式来验证以下要求:

  • 应至少包含8位数字(0-9)
  • 在数字之间,允许使用其他字符(a-z)(也是大写)
  • 它最多应包含20个字符(a-z 0-9)
示例

12345678: true
123adafa45678: true
123ab456: false (needs atleast 8 digits, now only 6)
ab12345a678: true 
ab123456789afgb2459a2: false (more then 20 characters)
我试过几种方法,但如果我使用以下方法:
(\D*\D\D*){8,}
然后它可以工作,但不满足最后一个要求(最多20个字符)。

对8位数字使用前瞻:

^(?=(.*\d){8})[a-zA-Z\d]{8,20}$

请看。

python对您有好处吗?您使用哪种编程语言?对不起,AngularJS,但如果我知道如何编写正则表达式,我想就可以了。为什么要使用正则表达式呢?
/^(?=[a-z\d]{8,20}$)(?:[a-z]*\d){8}[a-z\d]*$/I
这是一个不错的,谢谢!工作起来很有魅力!我还要再做两个,希望今天晚些时候我能理解。:)是的,只是建议将
(.*\d){8}
替换为
(?:\d*\d){8}
。谢谢Wiktor!改变了这一点。@WiktorStribiżew如果有多个用换行符分隔的目标,您的建议将失败,因为
\D
匹配换行符,而dot不匹配。您的版本不匹配。@Bohemian:传递给此正则表达式的字符串不能是多行字符串。这是一个密码验证。无论您是使用
\D
还是
,这都无关紧要。无论如何,我在我的评论中建议了
(?:[a-z]*\d){8}