2014-04-27 2 views
0

Laravel에서 유효성 검사기를 확장하여 미국 전화 번호를 확인하려고합니다. My Regex는 대부분의 유형 (777.777.7777, (777) 777-777, 등)을 허용하지만 유효성 검사기에서 정규화하기를 원합니다. 여기까지 왔지만 정상화되지 않았습니다.Laravel 유효성 검사를 확장하여 입력 수정

Validator::extend('phone', function($attribute, $value, $parameters) 
{ 
    $value = trim($value); 
    if ($value == '') { return true; } 
    $match = '/^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/'; 
    $replace = '/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/'; 
    $return = '($1) $2-$3'; 
    if (preg_match($match, $value)) 
    { 
     return preg_replace($replace, $return, $value); 
    } 
    else 
    { 
     return false; 
    } 
}); 

정규화 된 값을 반환하면 문제가 발생할 수 있지만 작동하지 않습니다. 유효성 검사기 확장은 어떻게 원래 입력을 수정할 수 있습니까?

답변

1

유효성 검사기에서 입력 내용을 변경하고 유효성 검사를 담당하지 않는 것이 좋습니다.

Validator::extend('phone', function($attribute, $value, $parameters) 
{ 
    $value = trim($value); 
    if ($value == '') { return true; } 
    $match = '/^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/'; 
    $replace = '/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/'; 
    $return = '($1) $2-$3'; 
    if (preg_match($match, $value)) 
    { 
     Session::set('mutated', ['phone' => preg_replace($replace, $return, $value)]); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
}); 

그런 다음 단순히 Session::get('mutated'); 배열 또는 점 표기법 Session::get('mutated.phone');으로 데이터를 가져 : 당신은 당신이 세션을 사용하여 필요한 것을 얻을 수 그러나

.

+0

이 솔루션은 구현하기가 어렵습니다. Ardent에서 updateUniques를 사용하고 있기 때문에, 재정의 (override)에도 불구하고 이전 입력을 자동으로 가져옵니다. 나는 save()와 forceSave()를 시도했다. 어느 것도 작동하지 않는다. 유효성 검사기에서 입력을 변경할 수 있기를 기대합니다. – Whit

+1

입력/요청은 입력이기 때문에 분명히 변경하는 방법을 제공하지 않습니다. Ardent에 대한 점검을 개선하고 어떤 식 으로든 방법을 수정하려고합니다. –

관련 문제