2012-02-07 2 views
0

유효성 검사를 위해 주어진 필드에 대해 이와 같이 작성된 함수. 검토하고 가치있는 프로젝트 내 기능을 개선하십시오함수를 사용하여 필드의 유효성을 검사하는 더 나은 방법

내 필드

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

+0

"더 나은"감각? 현재 버전에서 어떤 문제점을 발견 할 수 있습니까? –

+0

IsEmail(), IsStrLen()과 같은보다 구체적인 기능 (작고 쉬운 기능)을 작성해야합니다. 그렇게하기 만하면 모든 테스트를 "반복"하고 작은 함수를 호출하는 것입니다. – djot

답변

0

이 아마 당신이 원하는 답보다 약간 적은 별,하지만 난 당신이 걸릴 제안 Zend_Validator 클래스에서 사용되는 패턴 및 아이디어 중 일부를 살펴보십시오. (그것은 "젠드 말한다"하지만 PHP의 기본에 포함되지 않습니다.) 그 주에

: 나는 예외를 발생하지 않을

  • . 첫 번째 문제를 쉽게 찾을 수 있지만 여러 유효성 검사기를 반복하는 것이 더 어렵습니다. 일반적으로 사람들에게 모두의 첫 번째 문제 만 표시하고 반복적으로 양식을 제출하여 오류가있는 부분을 모두 처리하도록 표시하는 것이 좋습니다.
  • 유효성 검사 기능을 만들지 마시고 유효성 검사 클래스를 만드십시오. 기본적으로 OOP를 사용하십시오. 보다 깔끔하고 개선하기 쉬운 코드를 만들뿐만 아니라 유효성 검사기의 사본을 만들고 필요에 따라 규칙/메시지를 미세 조정할 수 있습니다.
  • 악센트 부호가있는 문자 또는 다른 언어를 다루기 시작하면 약간 이상해집니다. 당신이 만들고있는 것이 추가 작업을 필요로하는지 아닌지 알아 내십시오.
관련 문제