我正在尝试使这个模式正常工作,我只是无法使它工作。基本上,我想验证一个只接受字母,数字和以下字符的字符串:@!?_;:-,.
这是我到目前为止的源代码:
<?php
$test_string = '1234bcd@!?_;:-,.';
echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string );
?>
答案 0 :(得分:2)
您正在尝试打印一个整数,这个整数无法实现您的目标。试试这个:
if( preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string )) {
echo 'valid string!';
} else {
echo 'invalid!';
}
请注意,正则表达式认为字符串有效:
另请注意,您的输入字符串应该是无效的,不仅因为它太长,而且因为它包含一个破折号,您的正则表达式不支持:
1234bcd@!?_;:-,.
^
No match
要将它包含在正则表达式中,请将其放在正则表达式中字符类的末尾:
preg_match( "/^[a-z0-9@!?_;:,.-]{4,12}$/i", $test_string )
^
答案 1 :(得分:0)
一些字符由regexp保留,例如。 ?等等 将它们与反斜杠一起使用
if( preg_match( "/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i", $test_string )) {
...
}
答案 2 :(得分:0)
此模式有效:
$test_string = '1234bcd@!?_;:-,.';
if(preg_match('/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i', $test_string))
{
echo 'Valid';
}
但在这种情况下1234bcd@!?_;:-,.
,它不会因为输入字符串长度为16(长度不超过4到12个字符)。
顺便说一句,总是逃避元字符。您将找到完整列表here。