Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP没有应用正则表达式检查无效字符串_Php_Regex - Fatal编程技术网

PHP没有应用正则表达式检查无效字符串

PHP没有应用正则表达式检查无效字符串,php,regex,Php,Regex,我制作了一个正则表达式,它允许: NP123 FS-123 FS-123-456 还是空虚 在Debuggex上工作得很好,但我不明白为什么PHP接受像“TEST”这样的字符串,它不是被接受的模板的一部分 检查小提琴手:您可以使用 ^(?:FS-[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)?|NP[0-9a-zA-Z]+)?$ 见 详细信息 ^-字符串的开头 (?:-开始外部非捕获组,用于将锚应用于内部所有备选方案 FS-[0-9a-zA-Z]+(?:-[0-9a-zA-

我制作了一个正则表达式,它允许:

  • NP123
  • FS-123
  • FS-123-456
  • 还是空虚
在Debuggex上工作得很好,但我不明白为什么PHP接受像“TEST”这样的字符串,它不是被接受的模板的一部分

检查小提琴手:

您可以使用

^(?:FS-[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)?|NP[0-9a-zA-Z]+)?$

详细信息

  • ^
    -字符串的开头
  • (?:
    -开始外部非捕获组,用于将锚应用于内部所有备选方案
    • FS-[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)?
      -
      FS-
      和1+字母数字字符,然后是可选的
      -
      和1+字母数字字符序列
    • |
      -或
    • NP[0-9a-zA-Z]+
      -
      NP
      和1+字母数字字符
  • )?
    -组结束
  • $
    -字符串结束

首先,您的分组是错误的。其次,前瞻作为一个单独的替代方案看起来也是错误的。在代码中尝试“~^(?:FS-[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)?| NP[0-9a-zA-Z]+)?$”。我知道您也想匹配一个空字符串(而不是“void”)。