限制正则​​表达式中的字母字符数

bea*_*edd 3 regex

我一直在努力弄清楚如何最好地做这个正则表达式.

这是我的要求:

  • 最多8个字符
  • 只能是字母数字
  • 最多只能包含三个字母字符[az](零字母字符有效)

任何想法,将不胜感激.

这是我到目前为止所做的,但它只查找连续的字母字符:

^(\d|([A-Za-z])(?!([A-Za-z]{3,}))){0,8}$
Run Code Online (Sandbox Code Playgroud)

pol*_*nts 7

我写的是这样的:

^(?=[a-z0-9]{0,8}$)(?:\d*[a-z]){0,3}\d*$
Run Code Online (Sandbox Code Playgroud)

它有两个部分:

  • (?=[a-z0-9]{0,8}$)
    • Looksahead并匹配最多8个字母数字到字符串的末尾
  • (?:\d*[a-z]){0,3}\d*$
    • 基本上允许多达3的注射[a-z]之间\d*

Rubular

rubular.com上

12345678    // matches
123456789
@(#*@$
12345       // matches
abc12345
abcd1234
12a34b5c    // matches
12ab34cd
123a456     // matches
Run Code Online (Sandbox Code Playgroud)

备择方案

我认为正则表达式是最好的解决方案,但由于字符串很短,因此通过以下两个步骤执行此操作会更具可读性:

  • 它必须匹配 [a-z0-9]{0,8}
  • 然后,删除所有 \d
    • 现在必须是长度 <= 3