1

我正在努力使这种模式正常工作,但我无法让它发挥作用。基本上,我想验证一个只能接受字母、数字和以下字符的字符串:@!?_;:-,.

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

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

3 回答 3

2

您正在尝试打印一个整数,这将无法实现您想要做的事情。尝试这个:

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

请注意,您的正则表达式认为字符串是有效的,如果它们是:

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

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

1234bcd@!?_;:-,.
             ^
             No match

要将其包含在您的正则表达式中,请将其放在正则表达式中字符类的末尾:

preg_match( "/^[a-z0-9@!?_;:,.-]{4,12}$/i", $test_string )
                              ^
于 2012-10-03T13:57:07.490 回答
0

一些字符由正则表达式保留,例如 . ? 等将它们与反斜杠一起使用

if( preg_match( "/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i", $test_string )) {  
  ...
} 
于 2012-10-03T13:59:56.960 回答
0

这种模式有效:

$test_string = '1234bcd@!?_;:-,.';

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

但在这种情况下1234bcd@!?_;:-,.,它不会因为输入字符串长度为 16(不是 4 到 12 个字符之间的长度)。

顺便说一句,总是转义元字符。您将在此处找到完整列表。

于 2012-10-03T14:10:04.397 回答