2011-06-30 33 views
1

我有我的PHP表單驗證有點問題,我可以使用一些幫助。驗證PHP表單字段,如果不留空

我得到一個可選字段,只有在用戶填寫它時才應該驗證,否則表單應該按正常方式處理。下面是該領域的驗證:

if (!preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) : 
     $errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes')); 
     endif; 

可能很簡單,但在現階段,我怎麼能繞過驗證如果該字段爲空我不能讓我的頭左右。有任何想法嗎?

+0

''$ start''不正確。這將創建一個字符串,其文字值爲文本「$ string」,而不是變量$ string的內容。報價是完全多餘的,可以刪除。如果你必須使用引號,那麼使用'「$ string」'來代替(這仍然是無用的,但不太錯誤)。 –

回答

2
if(!empty($your_field) && !preg_match(...)) 

PHP測試。 如果該字段爲空,PHP將跳轉到下一條指令。存儲在$start

+0

這是正確的;使用空檢查避免瞭如果$ start沒有設置時產生的昂貴的錯誤/通知。 –

+0

謝謝大家,但是這是我馬上開始工作並與之一起工作的人。非常感激! – Andrew

0

你有沒有嘗試過這樣的事情:

if (!empty($_POST['field_name'])) { 
if(!preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) : 
    $errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes')); 
} 

它首先會看場的狀態,那麼如果需要移動到驗證。

編輯 對不起,剛剛意識到有一個最佳的方式存在:

if(!empty($start) && !preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) : 
    $errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes')); 
endif; 

爲什麼!empty($start)?因爲它使用標準的PHP函數來定義值是否存在。不是100%的要求,但最好的做法是在確定值是否存在時使用empty()函數。

1

包裝你的代碼的這裏面的其餘部分,它只會如果$開始不爲空,如果該字段是檢驗正則表達式之前空觸發,

if (trim($start)) { 
    // put other code in here 
} 
0

假設你的表單數據:

if ($start && !preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) : 
     $errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes')); 
     endif;