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

问题描述 投票:0回答:1

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

  1. 必须包含至少 10 个字符。
  2. 必须至少有其中之一:/(斜杠)。 (点)@(arroba)。
  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 regex preg-match
1个回答
0
投票

您可以使用:

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

这里:

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