2015-05-31 288 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