PHP Preg_Match问题

时间:2015-05-31 21:30:42

标签: php regex codeigniter preg-match

我正在开发CodeIgniter项目,我正在进行自定义验证,而且我不是正则表达式专家。 到目前为止,我做了一个简单的测试,但我似乎无法做到这一点。 此验证只能包含A-Z a-z 0-9和特殊字符,例如:

@ ! # / $ % & ' * + - = ? ^ _ ` { | } ~ .

我不能拥有( ) [ ] : ; " < > , \

在我的控制器中:

public function test(){

 $this->form_validation->set_rules('communication_number', 'Communication Number', 'required|trim|xss_clean|callback_validate_communication_number');

    $this->form_validation->set_message("validate_communication_number", "The %s field must only contain blah blah");

    if($this->form_validation->run() == false)
    {
        echo validation_errors();
    }
    else
    {
        echo "Passed";
    }
}

public function validate_communication_number($communication_number)
{
    if(preg_match("/^[a-z0-9@\!\#\/$\%\&\'\*\+\-\/\=\?/^/_/`/{/|/}/~/.]+$/i", $communication_number))
    {
        return true;
    }
    else
    {
        return false;
    }
}

1 个答案:

答案 0 :(得分:3)

如果您使用双引号或只需更改为单引号,则必须使用\\转义反斜杠:

if(preg_match('/^[a-z0-9@\!\#\/$\%\&\'\*\+\-\/\=\?/^/_/`/{/|/}/~/.]+$/i', $ff_communication_room))
              ^--- Here

但是,你可以这样写你的正则表达式(你不需要所有那些转义的反斜杠:

^[a-z0-9@!#\/$%&'*+=?^_`{|}~.-]+$

正如您所看到的,它是一个有效的正则表达式: Regular expression visualization

<强> Working demo

代码

$re = '/^[a-z0-9@!#\/$%&'*+=?^_`{|}~.-]+$/i'; // Note hyphen at the end
$str = "your string"; 

if(preg_match($re, $str))
{
    return true;
}
else
{
    return false;
}