2

我需要一点帮助我想检查输入是否与掩码匹配

掩码是这样的:12.345.678/9012-34 (xx.xxx.xxx/xxxx-xx)

到目前为止我尝试过的是这个

$string = '12.345.678/9012-34';

if(!preg_match('/^[0-9]{2}.[0-9]{3}.[0-9]{3}/[0-9]{4}-[0-9]{2}$/', $string)) {
     echo 'Doesnt match the mask!';
}

它没有成功。谢谢你的帮助。

4

2 回答 2

3

您需要转义要匹配的/and.文字,因为您使用前者作为正则表达式分隔符,并且在正则表达式中.具有特殊含义(通常匹配除 之外的所有字符\n)。

if(!preg_match('/^\d{2}.\d{3}\.\d{3}\/\d{4}-\d{2}$/', $string)) {
     echo 'Doesnt match the mask!';
}

我也使用了,\d而不是[0-9]因为它不太容易阅读和理解,它们的意思是一样的。

于 2012-08-21T01:39:56.170 回答
1

这是我将如何改变它:

/^[0-9]{2}.[0-9]{3}.[0-9]{3}/[0-9]{4}-[0-9]{2}$/

1)您可以使用\d数字的快捷方式:

/^\d{2}.\d{3}.\d{3}/\d{4}-\d{2}$/

2)点(句号)是一个特殊字符,可以匹配任何字符,所以需要转义。

/^\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}$/

3)正斜杠是你的分隔符,所以应该在里面转义;或者,使用不同的分隔符:

/^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/

#^\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}$#
于 2012-08-21T01:42:39.887 回答