2015-05-31 290 views
1

我正在开发一个CodeIgniter项目,并且正在进行自定义验证,而且我不是正则表达式专家。 到目前为止,我做了一个简单的测试,但我似乎无法得到这个权利。 此验证只能包含AZ,az或0-9和特殊字符如:PHP问题Preg_Match

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

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

在我的控制器:

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("/^[[email protected]\!\#\/$\%\&\'\*\+\-\/\=\?/^/_/`/{/|/}/~/.]+$/i", $communication_number)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

我这是一个不能正常工作的示例字符串? – Anonymous

+0

可能会在未来帮助你:http://www.regexr.com/ –

+0

@DavidYue谢谢!我会保留这个书签 – FNMT8L9IN82

回答

3

你逃跑用\\反斜杠如果你使用双引号或者只是改成这样的单引号:

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

然而,你可以写你的正则表达式,因为这(你不需要那些逃脱反斜线:

^[[email protected]!#\/$%&'*+=?^_`{|}~.-]+$ 

正如你可以看到,这是一个有效的正则表达式: Regular expression visualization

Working demo

代码

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

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

谢谢你!我测试了每一个特殊角色,并且它像一个魅力。我有双引号而不是单引号的原因是因为我需要正则表达式中的单引号。不幸的是,我不能给你一个投票,但是当我有足够的分数时,我会回来给你我的投票,就像我保证以前帮助过我的人一样。 – FNMT8L9IN82

+0

@ FNMT8L9IN82谢谢,很高兴帮助:) –

+0

好吧,看看那个。我有足够的积分给你我的投票!再一次,谢谢! – FNMT8L9IN82