[^\f\n\r\t\v] <=> \S ,是否真的等同?
去掉[^\f\n\r\t\v],$s2中的空格去不了,加上以后,什么都不匹配……function checkString($str){
//去掉非英文以外的其他语言包括乱码、空格。需要英文加特殊符号的内容
if(preg_match("/^ [ [:alnum:] [:space:] [:punct:] [^\f\n\r\t\v]]+ $/x",$str)){
return $str;
}else{
echo "含非匹配项";
}
}
$s1 = "!!!!!!!";
$s2 = "1 1 1 1 1 1 1";
$s3 = "123asd";
echo checkString($s1)."<br>";
echo checkString($s2)."<br>";
echo checkString($s3)."<br>";/*输出
含非匹配项
含非匹配项
含非匹配项
*/还有,将[]改成(),再加个第三参数$res,没有获取到结果集。如:if(preg_match("/^( [ [:alnum:] [:space:] [:punct:]]+ )$/x","11111111",$res)){
print_r($res); 
}else{  
   echo "含非匹配项";  //输出在这里
}

解决方案 »

  1.   

    [^\f\n\r\t\v] <=> \S ,是否真的等同?
    不等同!
    \S 表示非空白字符,空格也是空白字符,[^\f\n\r\t\v]众位包括
      

  2.   

    不知你在研究什么问题if(preg_match("/^( [ [:alnum:] [:space:] [:punct:]]+ )$/x","11111111",$res)){
                print_r($res); 
            }else{  
       echo "含非匹配项";  //输出在这里
    }Array ( [0] => 11111111 [1] => 11111111 )
      

  3.   

    [^\f\n\r\t\v]过滤不了空格啊:if(preg_match("/^( [^\f\n\r\t\v]+ )$/x","1 1 1 11111",$res)){
                print_r($res);
            }else{
       echo "含非匹配项";  //输出在这里
    }目的:
    可过滤换页符、换行符、回车符、空格、制表符、垂直制表符、特殊字符,正则表达式:?
    如果是不能有连续3位相同的呢,正则表达式:?
      

  4.   

    上面打错了;if(preg_match("/^( [^\f\n\r\t\v]+ )$/x","1 1 1 11111",$res)){
                print_r($res);
            }else{
       echo "含非匹配项"; 
    }
    //输出
    Array ( [0] => 1 1 1 11111 [1] => 1 1 1 11111 ) 
      

  5.   

    if(preg_match("/^( [^\s]+ )/x","1 1 1 11111",$res)){
                print_r($res);
            }else{
       echo "含非匹配项"; 
    }Array
    (
        [0] => 1
        [1] => 1
    )
      

  6.   

    晕菜,我在网上找的一个介绍正则表达式的内容是这样写的:
    \s  匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。
    \S  匹配任何非空白字符。等价于[^\f\n\r\t\v]。

    现在才知道:浮云太多也是会漏水的!!!
    那么这样怎么实现?
    目的:
    1、可过滤换页符、换行符、回车符、空格、制表符、垂直制表符、特殊字符,正则表达式:?
    2、如果在1的条件下不能有连续3位相同的呢,正则表达式:?
      

  7.   

    你按space键位的那个空格你都没包含进来,恰巧你的串里的空格是space那个,有点晕了吧,呵呵。
    ascii码
    --------------
    space -> 32
    \n -> 10
    \t -> 9
    \f -> 12
    \r -> 13
    \v -> 11
      

  8.   

    你加x修正符然后正则里还有空格符,这不是白用x了么?
    if(preg_match("/([^ \f\n\r\t\v]+)/","1 2 3 4444",$res))
    {
       print_r($res)
    }
      

  9.   


    if(preg_match("/([^ \f\n\r\t\v]+)/","1 2 3 4444",$res))
    {
       print_r($res);
    }
    //输出
    Array ( [0] => 1 [1] => 1 ) //2 3 4444呢?还用,请帮忙回答:
    1、可过滤换页符、换行符、回车符、空格、制表符、垂直制表符、特殊字符,正则表达式:?
    2、如果在1的条件下不能有连续3位相同的呢,正则表达式:?
      

  10.   

    第一个问题就说你想留下什么吧
    第二个:if(preg_match('/(.)\1\1/',$str,$matches))
    echo '不能有连续三位相同';
      

  11.   

    你用preg_match肯定只匹配第一个匹配的串,用preg_match_all
      

  12.   

    第二个我试过了,可以。
    第一个描述的不清楚吗?字符串中,除了换页符、换行符、回车符、空格、制表符、垂直制表符、特殊字符(!$@#……),其它都留下。
    这个的确得到了,谢谢。
    Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4444 ) [1] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4444 ) ) 
      

  13.   

    这样简单点吧,先说说怎么将过滤空格的正则和过滤重复字符的正则和在一起:if(preg_match_all("/([^\f\n\r\t\v][(.)\1\1]+)/","1 2 3 4444",$res))
    {
       print_r($res);
    }else{
       echo "含非匹配项";  //这里输出
    }
      

  14.   

    $s = "1 2 3 4444";//过滤空格的正则
    echo preg_replace('/\s+/', '', $s);//1234444//过滤重复字符的正则
    echo preg_replace('/(.)\\1+/', '$1', $s);//1 2 3 4//和在一起
    echo preg_replace(array('/(\s+)/', '/(.)\\1+/'), array('', '$1'), $s);//1234
      

  15.   

    咕~~(╯﹏╰)b,preg_replace(array('/(\s+)/', '/(.)\\1+/'), array('', '$1'), $s);
    怎么用preg_match_all()表示,因为我想加判断,比如在验证密码的时候不可能将用户的原密码进行裁剪,只要判断出有重复值和含空格就行:$psw = "a 2 sw\fd 11\t11 11 *@\n#4_\r\v-";
    if(preg_match_all($pattern,$psw,$res)){
      print_r($res);  //获取到 a2swd1111114,这样能实现吗?,实在不行是获取a2swd14也行
      return $res;
    }else{
      //将非匹配项罗列出来,添加提示
      echo "包含重复字符:111111";
      echo "包含特殊字符:*@#_)-";
      echo "包含空格";
      echo "包含制表符:\t";
      echo "包含换页符:\f";
      echo "包含回车符:\r";
      echo "包含换行符:\n";
      echo "包含垂直制表符:\v";
    }这样能实现吗?
      

  16.   

    $psw = "a 2 sw\fd 11\t11 11 *@\n#4_\r\v-";
      

  17.   

    preg_match_all("/([\s*@#_)-])|((.)\\3+)/", $psw, $r);
    print_r($r);
    Array
    (
        [0] => Array
            (
                [0] =>  
                [1] =>  
                [2] => 
                [3] =>  
                [4] => 11
                [5] => 
                [6] => 11
                [7] =>  
                [8] => 11
                [9] =>  
                [10] => *
                [11] => @
                [12] =>             [13] => #
                [14] => _
                [15] => 
                [16] => )
                [17] =>  
                [18] => -
            )    [1] => Array
            (
                [0] =>  
                [1] =>  
                [2] => 
                [3] =>  
                [4] => 
                [5] => 
                [6] => 
                [7] =>  
                [8] => 
                [9] =>  
                [10] => *
                [11] => @
                [12] =>             [13] => #
                [14] => _
                [15] => 
                [16] => )
                [17] =>  
                [18] => -
            )    [2] => Array
            (
                [0] => 
                [1] => 
                [2] => 
                [3] => 
                [4] => 11
                [5] => 
                [6] => 11
                [7] => 
                [8] => 11
                [9] => 
                [10] => 
                [11] => 
                [12] => 
                [13] => 
                [14] => 
                [15] => 
                [16] => 
                [17] => 
                [18] => 
            )    [3] => Array
            (
                [0] => 
                [1] => 
                [2] => 
                [3] => 
                [4] => 1
                [5] => 
                [6] => 1
                [7] => 
                [8] => 1
                [9] => 
                [10] => 
                [11] => 
                [12] => 
                [13] => 
                [14] => 
                [15] => 
                [16] => 
                [17] => 
                [18] => 
            ))
      

  18.   


    $psw = "a 2 sw\fd 11\t11 11 *@\n#4_\r) \v-";
    preg_match_all("/([\s*@#_)-])|((.)\\3+)/", $psw, $r);
    //print_r($r);echo"<br>";
    foreach($r as $s => $res){
    foreach($res as $e => $rest){
    if($rest == "\t") echo "{$s}-{$e}含制表符:\\t<br>";
    if($rest == "\f") echo "{$s}-{$e}含换页符:\\f<br>";
    if($rest == "\r") echo "{$s}-{$e}含回车符:\\r<br>";
    if($rest == "\n") echo "{$s}-{$e}含换行符:\\n<br>";
    if($rest == "\v") echo "{$s}-{$e}含垂直制表符:\\v<br>";
    //这里怎么表示?if(preg_match_all('/(.)\1\1/',$rest,$matches)) echo "{$s}-{$e}含重复字符:{$matches[0]}<br>";
    //这里怎么表示?if(preg_match_all('/(.)\1\1/',$rest,$matches)) echo "{$s}-{$e}含特殊字符:{$matches[0]}<br>";
    $result[$s][] = htmlentities($rest);
    }
    }
    print_r($result);
    /* printout:
    0-2含换页符:\f
    0-5含制表符:\t
    0-12含换行符:\n
    0-15含回车符:\r
    1-2含换页符:\f
    1-5含制表符:\t
    1-12含换行符:\n
    1-15含回车符:\r
    */
    Array ( [0] => Array ( [0] => [1] => [2] =>   [3] => [4] => 11 [5] => [6] => 11 [7] => [8] => 11 [9] => [10] => * [11] => @ [12] => [13] => # [14] => _ [15] => [16] => ) [17] => [18] => - ) [1] => Array ( [0] => [1] => [2] =>   [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => * [11] => @ [12] => [13] => # [14] => _ [15] => [16] => ) [17] => [18] => - ) [2] => Array ( [0] => [1] => [2] => [3] => [4] => 11 [5] => [6] => 11 [7] => [8] => 11 [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => ) [3] => Array ( [0] => [1] => [2] => [3] => [4] => 1 [5] => [6] => 1 [7] => [8] => 1 [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => ) ) //这里怎么表示?if(preg_match_all('/(.)\1\1/',$rest,$matches)) echo "{$s}-{$e}含重复字符:{$matches[0]}<br>";
    //这里怎么表示?if(preg_match_all('/(.)\1\1/',$rest,$matches)) echo "{$s}-{$e}含特殊字符:{$matches[0]}<br>";
      

  19.   

    <?php
    $psw = "a 2 sw\fd 11\t11 11 *@\n#4_\r) \v-+?~'";
    preg_match_all('/([\s[:punct:]]|((.)\3))/',$psw,$matches);
    echo str_replace($matches[0],$matches[2],$psw),'<br>';$condition=array(
    "\t"=>'含制表符:\t',
    "\f"=>'含换页符:\f',
    "\r"=>'含回车符:\r',
    "\n"=>'含换行符:\n',
    "\v"=>'含垂直制表符:\v',
    );
    foreach ($matches[0] as $v){
    if (in_array($v,array_keys($condition))) echo $condition[$v],'<br>';
    if (preg_match('/([[:punct:]])/',$v)) echo '含特殊字符',$v,'<br>';
    if (preg_match('/(.)\1/',$v)) echo '含重复字符',$v,'<br>';
    }
    /*
    a2swd1111114 
    含换页符:\f
    含重复字符11
    含制表符:\t
    含重复字符11
    含重复字符11
    含特殊字符*
    含特殊字符@
    含换行符:\n
    含特殊字符#
    含特殊字符_
    含回车符:\r
    含特殊字符)
    含特殊字符-
    含特殊字符+
    含特殊字符?
    含特殊字符~
    含特殊字符'
    */
      

  20.   

    终于解决,感谢各位支持!
    找到有关[:punct:]的用法了:http://hi.baidu.com/yxhsunshine/blog/item/2e3f3458396c1ada9c8204b8.html