PHP 正则表达式,每个检查都为真

PHP Regex, every Check got true

我在 PHP

中的正则表达式有一些问题

代码:

$pregResult = preg_match('/(([S][S])[1-9]{2})|(([W][S])[1-9]{2}\/[1-9]{2})/', $newModul->getGueltigkeitszeitraum());

我每次都得到 1 作为结果...(正确)

我想做的只是允许以下组合

SS00 - SS99
WS00/00 - WS99/99

我的代码有什么问题?

试试这个:

$pregResult = preg_match('/^([S][S][0-9]{2}|[W][S][0-9]{2}\/[0-9]{2}|Schuljahr[0-9]{2}\/[0-9]{2})$/',
     $newModul->getGueltigkeitszeitraum());

^: 模式应该在字符串的开头

$: 字符串中的模式后不应有任何内容

[S]:字符S

[0-9]:一个数字(与\d相同)

[0-9]{2}:准确的 2 位数字

查看此处了解更多信息PHP Regular Expression

我想你想要这样的东西,

$pregResult = preg_match('~^(?:(SS[0-9]{2})(?:\h+-\h+(?1))|(WS[0-9]{2}\/[0-9]{2})(?:\h+-\h+(?2)))$~m', $newModul->getGueltigkeitszeitraum());

DEMO

(?1) 递归第一个子模式。

[0-9]匹配0到9的所有数字

SS00 - SS99,我想你的意思是从 SS00SS99。在这种情况下,您可以使用 \d(匹配范围为 0 到 9 的数字)。

$pregResult = preg_match('~^(?:SS\d{2}|WS\d{2}\/\d{2})$~m', $newModul->getGueltigkeitszeitraum());

DEMO