【问题标题】:Regex - require some characters and allow only some additional?正则表达式 - 需要一些字符,只允许一些额外的?
【发布时间】:2016-06-12 12:01:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 必须包含.-、空格?还是可选的?
  • 不,它们应该是可选的

标签: php regex laravel-5.2 whitelist


【解决方案1】:

让我们看看...

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

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

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

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

【讨论】:

  • 你能解释一下这部分?:.*?吗?
  • @haheute (?=...) 是一个前瞻,(?:...) 是一个非捕获组 .*? 匹配所有非贪婪。现在你有了搜索词,你应该能够弄清楚每个 prat 的真正作用:-)
  • @haheute,andlrc 给了你答案——我会指给你regex101,如果你正在为某些功能苦苦挣扎,它可以分解你扔给它的任何 PCRE 模式(看看解释部分)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多