解决方案 »

  1.   

     谢答!这个存在漏洞;Example:$test = "_aaa_";也会匹配上
      

  2.   

    逻辑判断嘛,何必再一颗树上吊死?
    如果 不以下划线开头和结尾 为真的话
    那么 以下划线开头和结尾 就为假啰当然写起来也很简单,只是我回复时没有测试
    两种方案都可行
    $a = array('_a_', '_a', 'a_','a', 'aa');
    $r = preg_grep('/^_|_$/', $a);
    print_r($r);
    /**
    Array
    (
        [0] => _a_
        [1] => _a
        [2] => a_
    )
    **/$r = preg_grep('/^(?!_)\w*[^_]$/', $a);
    print_r($r);
    /**
    Array
    (
        [3] => a
        [4] => aa
    )
    **/
      

  3.   

    谢谢。明白了,果然是另一种思路。
    不过能解决提问,不能解决我的实际问题。
    我是想自己写一个邮件的验证:/^[a-zA-Z0-9]+(\.\w+)*[^_]@[^-][a-zA-Z0-9-]+[^-]\.[^-][a-zA-Z0-9-]+[^-]$/用户名不能以_结尾,如上,[email protected]是可以的,但是wcblks.b@就不可以匹配,怎么解决这个问题。
    逻辑判断嘛,何必再一颗树上吊死?
    如果 不以下划线开头和结尾 为真的话
    那么 以下划线开头和结尾 就为假啰当然写起来也很简单,只是我回复时没有测试
    两种方案都可行
    $a = array('_a_', '_a', 'a_','a', 'aa');
    $r = preg_grep('/^_|_$/', $a);
    print_r($r);
    /**
    Array
    (
        [0] => _a_
        [1] => _a
        [2] => a_
    )
    **/$r = preg_grep('/^(?!_)\w*[^_]$/', $a);
    print_r($r);
    /**
    Array
    (
        [3] => a
        [4] => aa
    )
    **/