2012-02-15 4 views
3

"price"라는 요소가있는 폼이 있습니다. "float"유효성 검사기로이 요소의 유효성을 검사합니다. 내가 예를 들어, 삽입 할 때 건은 다음과 같습니다"." 젠드 유효성 검사기 부동 소수점의 소수 자릿수

12,50 =>이 유효하지만 난 DB (MySQL의)에 저장하려고 할 때 "12.00"

그래서 내가에 싶어로 저장됩니다 소수점 문자를 ","에서 "."로 변경하십시오. 아무도 어떻게 아는가 ??

참고. 내가 넣어 경우

$price->addValidator('Float', 'de') 

또는

$validator = new Zend_Validate_Float(array('locale' => 'de')); 
$price->addValidator($validator) 

그것은 작동하지 않습니다.

+1

데이터베이스가 다른 나라라고 생각합니다. 어떤 데이터베이스를 사용하고 있습니까? 태그를 추가 할 수 있습니다. – DOK

+0

데이터베이스는 mysql입니다. –

+0

"."에서 소수점 문자를 변경 하시겠습니까? ","데이터베이스에 저장할 때? " 데이터베이스에서 영어로 형식화 된 데이터를 사용자의 로켈에서 지역화하는 것보다 적절합니다. – Liyali

답변

9

Zend_Filter LocalizedToNormalized 필터를 사용하면 사용자의 지역에 따라 현지화 된 가격이 표준화됩니다.

일반적인 가격 요소는 이와 같은 것입니다 :

$price = new Zend_Form_Element_Text('price'); 
$price->setLabel('Price:') 
     ->setRequired(true) 
     ->setAttribs(array('required name' => 'price', 'maxlength' => '12')) 
     ->addFilter('StripTags') 
     ->addFilter('StringTrim') 
     ->addFilter('pregReplace', array('match' => '/\s+/', 'replace' => '')) 
     ->addFilter('LocalizedToNormalized') 
     ->addValidator('stringLength', true, array(1, 12)) 
     ->addValidator('float', true, array('locale' => 'en_US')) 
     ->addValidator('greaterThan', true, array('min' => 0)); 
$this->addElement($price); 

은 물론, 당신은 그것을 개선하고 당신이 필요로하는 검증/필터를 추가 할 수 있습니다.

+0

사실, 나는 그것을 현지화하고 싶지 않다. 123.4와 같은 숫자에 대한 유효성 검사기로 float을 사용하고 싶습니다. 쉼표를 사용하고 싶지 않습니다. –

+1

그런 다음 쉼표를 사용하지 않는 로케일을 유효한 float 구분 기호 (예 : en_US)로 사용해야합니다. 찾고있는 행은 다음과 같습니다 :'-> addValidator ('float', true, array ('locale'=> 'en_US'))' – Liyali