将输入与掩码匹配


Matching input to mask

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

口罩是这样的: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!';
}

结果没有成功。谢谢你的帮助。

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

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

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

以下是我将如何更改它:

/^[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}$#