PHP中的正则表达式,具有字符范围,但不包括特定的字符

Regular expression in PHP, with range of characters, but that excludes specific ones

提问人:Ricardo Castañeda 提问时间:3/26/2023 更新时间:3/26/2023 访问量:64

问:

我正在尝试创建一个带有preg_match的正则表达式,该表达式可以检测具有以下要求的字符串:

  1. 必须至少包含 10 个字符。
  2. 必须至少存在以下项之一:/(斜杠)。(点)@(阿罗巴)。
  3. 不得包含以下任何字母:=、*、_、x、y、z

我认为我知道如何单独实现每个要求(也许其中一个是错误的),我的问题是我不知道如何在一个表达式中连接所有要求。

  1. [a-ZA-Z]{10,}
  2. [/.@]
  3. [^=*_xyz]

以下方案必须返回 1(或 true)。

$string1 = "Mega/lodon";  
$string2 = "Megalo.don";  
$string3 = "Me@galo/doing"; 

以下方案必须返回 0(或 false)。

$string4 = "Meg@loz=on";  
$string5 = "Meglo*don";  
$string6 = "Megzlodonx";  
$string7 = "=egalodoing";

这是我正在尝试的:

preg_match("/[a-zA-Z]{10,}.[\/.@]?.[^=*xyz]/", $string1);
PHP 正则表达 Preg-Match

评论


答:

4赞 markalex 3/26/2023 #1

您可以使用:

^(?=.*[\/.@])[^=*_xyz]{10,}$

这里:

  • ^(?=.*[\/.@])- 检查在 string() 开头的某处是否有任何符号:,,,^/.@
  • [^=*_xyz]{10,}- 检查您的行是否至少包含 10 个符号,并且不包含任何,,,,,*_xyz
  • $- 字符串末尾的标记,以便在前 10 个“好”符号之后无法匹配禁止的符号。