2012-02-15 30 views
3

私は "price"という要素を持つフォームを持っています。私はこの要素を "float"バリデータで検証します。私は、例えば、挿入したときの事は次のとおりです。"。" zendバリデータの浮動小数点数の小数点以下は

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フィルタを使用すると、ユーザーのロケールに応じてローカライズされた価格が正規化されます。

典型的な価格要素はこの1つのようになる:もちろん

$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のような数値のバリデータとして浮動小数点数を使用したいだけです。コンマを使用したくありません。 –

+1

次に、カンマを受け入れないロケールを有効な浮動小数点区切り文字(en_USなど)として使用する必要があります。 ' - > addValidator( 'float'、true、array( 'locale' => 'en_US'))'あなたが探している行は、 – Liyali

関連する問題