PHP preg_match模式问题

时间:2012-10-03 13:54:39

标签: php regex preg-match

我正在尝试使这个模式正常工作,我只是无法使它工作。基本上,我想验证一个只接受字母,数字和以下字符的字符串:@!?_;:-,.

这是我到目前为止的源代码:

<?php
  $test_string = '1234bcd@!?_;:-,.';
  echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string );
?>

3 个答案:

答案 0 :(得分:2)

您正在尝试打印一个整数,这个整数无法实现您的目标。试试这个:

if( preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string )) {
    echo 'valid string!';
} else {
    echo 'invalid!';
}

请注意,正则表达式认为字符串有效:

  • 长度在4到12个字符之间
  • 仅由alpabetic字符,数字和您包含的其他字符组成。

另请注意,您的输入字符串应该是无效的,不仅因为它太长,而且因为它包含一个破折号,您的正则表达式不支持:

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