正则表达式 - 需要一些字符并只允许一些额外的字符?

Regex - require some characters and allow only some additional?

我想验证 PHP 中的用户名并使用正则表达式检查它们。它们应至少包含 2 个 'real' 个字符,如 AÄs15,但其他一些如 ._ 或空格也应该被允许。所需字符的位置无关紧要。

这是我目前所拥有的,不幸的是也允许 ... 作为用户名:

preg_match('/^[\pL\pN\s-+_.]+$/u', $value)

我只想允许某些字符。例如,没有 <#。 我该怎么做?

让我们看看...

  • 至少两个letters/numbers:^(?:.*?[\p{L}\p{N}]){2}
  • 允许的其他字符:^[-+.\w ]+$

让我们把它们结合起来,我们得到:

^(?=(?:.*?[\p{L}\p{N}]){2})[-+.\w ]+$

我对检查至少有 2 个必需字符的部分使用了 lookahead,并将其他所有内容放在模式的主要部分。这使您可以在同一输入上检查两个不同的条件。