PHP预匹配模式问题

PHP预匹配模式问题,php,regex,preg-match,Php,Regex,Preg Match,我正在努力使这个模式正确运行,但我就是无法使它正常运行。基本上,我想验证一个只能接受字母、数字和以下字符的字符串:@!?\u;:- 以下是我到目前为止的源代码: <?php $test_string = '1234bcd@!?_;:-,.'; echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string ); ?> 您正试图打印一个整数,但它无法实现您的目标。试试这个: if( preg_match( "/^[a-

我正在努力使这个模式正确运行,但我就是无法使它正常运行。基本上,我想验证一个只能接受字母、数字和以下字符的字符串:
@!?\u;:-

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

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

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

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 )
                              ^

某些字符由regexp保留,例如?等 使用反斜杠

if( preg_match( "/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i", $test_string )) {  
  ...
} 
这种模式适用于:

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

if(preg_match('/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i', $test_string))
{
    echo 'Valid';
}
但是在这种情况下,
1234bcd@?:-,因为输入字符串长度为16(长度不在4到12个字符之间),所以不会更改


顺便说一下,总是转义元字符。您将找到完整的列表。

问题是?顺便说一句,这两行的结果将是
0
,因为您的
$test_string
太长:只有当被测字符串的长度在4到12之间时,模式才会匹配。不知何故,我认为问题不是用更有意义的内容替换0和1。当然,我可能错了。)这就是我对这个问题的解释:)虽然有点模糊,但谁知道呢!逃避现实class@Macino-不,你不需要,它在角色类的末尾(出于某种原因)。当它们在角色类中时,情况并非如此。为什么?和。是的,但不适用于-。在任何地方逃避这些都是一个好习惯(但正如你所提到的,除非它们是\^-])。看看