2012-02-07 52 views
0

爲了驗證給定的字段,我寫了這樣的函數。請檢閱並提高我的功能將項目值得使用函數驗證字段的更好方法php

我場

try{ 
    $message = 'First Name accepts keyboard characters only.'; 
    doValidateField ($firstName, 'First Name', true, 100, '/^([a-zA-Z0-9._\- #,^&`~<>:[email protected]$(){}\"\';\*\[\]?%| \n \r \t]*)$/', $message); 
} catch (Exception $e) { 
    $errorMessage = $e->getMessage(); 
    echo $errorMessage; 
} 

功能

/* 
* The following function is validates the fields 
* @params unknown values $fieldValue, $fieldName, $required, $maxLength, $mask, $message 
* @return tables rows $rowResponse 
*/ 

function doValidateField($fieldValue, $fieldName, $required, $maxLength, $mask, $message) { 
    // Checking the required field is empty or not 
    if ($required) { 
     if (strlen ($fieldValue) <= 0) { 
      throw new Exception ($fieldName . " is required."); 
     } 
    } 

    // Check field length is not greater than allowed length 
    if (strlen ($fieldValue) > $maxLength) { 
     throw new Exception ($fieldName . " cannot be greater than " . $maxLength . " characters."); 
    } 

    // check if specified mask exists in the field 
    if (! (preg_match ($mask, $fieldValue))) { 
     throw new Exception ($message); 
    } 

} 
+0

有什麼不起作用?或者,也許你正在尋找http://codereview.stackexchange.com? – deceze 2012-02-07 06:47:17

+0

「更好」哪個意義?你能指出你在當前版本中看到了哪些問題嗎? – 2012-02-07 06:47:17

+0

您應該編寫更多特定的函數(更小,更簡單的函數),如IsEmail(),IsStrLen()。所有你需要做的就是「循環」你所有的測試,並調用相應的小功能。 – djot 2012-02-07 06:51:35

回答

0

這可能是不太確切的一點比你想要的答案,但我會建議你把看看Zend_Validator類使用的一些模式和想法。 (它說:「Zend的」,但它不是PHP的默認部分。)

關於這一點:

  • 我不會拋出異常。它使查找第一個問題變得更容易,但更難循環遍歷多個驗證器。通常情況下,您需要向他們展示他們發生錯誤的地點,而不是僅顯示第一個問題,並讓他們重複提交表單以便通過他們所有的方式工作。
  • 不要做一個驗證函數,做一個驗證類。基本上,使用OOP。它不僅可以創建更簡潔,更易於改進的代碼,還可以根據需要稍微修改驗證程序的副本並稍微調整其規則/消息。
  • 請記住,當你開始處理重音字符或不同語言時,事情會變得有點怪異。找出你正在建設的東西是否需要額外的工作。