2016-12-13 3 views
-1

名前、電子メール、その他のフィールドがある登録フォームがあります。メールアドレス欄に** email @ yahoo.co **と入力してください。しかし実際には[email protected] **はmで終わらないので間違っています。 **[email protected]である必要があります。zend framework 2で電子メールを検証する

有効性を確認する方法はありますか。そのため、.comで終わり、@が付いている電子メールのみ受け付けます。

ビュー/登録:事前に

<?php 
echo $this->form()->openTag($form); 
?> 
<dl class="zend_form"> 
<dt><?php echo $this->formLabel($form->get('name')); ?></dt> 
<dd><?php 
    echo $this->formElement($form->get('name')); 
    echo $this->formElementErrors($form->get('name')); 
?></dd> 

<dt><?php echo $this->formLabel($form->get('email')); ?></dt> 
<dd><?php 
    echo $this->formElement($form->get('email')); 
    echo $this->formElementErrors($form->get('email')); 
?></dd> 

<dt><?php echo $this->formLabel($form->get('password')); ?></dt> 
<dd><?php 
    echo $this->formElement($form->get('password')); 
    echo $this->formElementErrors($form->get('password')); 
?></dd> 

<dt><?php echo $this->formLabel($form->get('confirm_password')); ?></dt> 
<dd><?php 
    echo $this->formElement($form->get('confirm_password')); 
    echo $this->formElementErrors($form->get('confirm_password')); 
?></dd> 
<br/> 
<dd><?php 
    echo $this->formElement($form->get('submit')); 
    echo $this->formElementErrors($form->get('submit')); 
?></dd> 

</dl> 
<?php echo $this->form()->closeTag() ?> 

おかげ

+4

ちょうど記録のため.... '[email protected] 'それは実際には有効な*電子メールアドレスです! – Hackerman

+1

ドメイン「yahoo.co」も有効であり、存在します。 – Dragos

+0

オタク兄弟はありがとう。 – Skylink

答えて

0

は、あなたが特定のホワイトリストからドメインが(たとえば、コールバックバリデータを使用して行うことができる可能にするには、カスタムバリデータを使用してフォームを検証することができます適切なカスタムバリデーターを使用してもよいでしょう)。

それは実際にもあなたのユースケースに依存しますが、あなたはまた、ブラックリストを使用して検証することができ:)

興味深いソリューションは、おそらく隠しフィールド(チェックボックスやラジオボタン)を有することになる、と最初にあなたのブラックリストに対して検証お使いの設定から、配列のキーを使用して、エラーメッセージのためのparamとして適切なドメインを渡す...

かどうかを確認し、お使いの設定でカスタムバリデータで、以下の

return [ 
    'domains_blacklist' => [ 
     'yahoo.co' => 'yahoo.com', 
    ], 
]; 

が含まれていると言います電子メールは、これらの文字列のいずれかで終了:それは、「?あなたは、あなたが入力したドメイン(%ドメイン%)が有効であることを確認しています」などのメッセージでエラーを返すん

in_array($domain_from_value, array_keys($this->config['domains_blacklist')) 

場合。

フォームを再度表示するときに、エラーが存在するかどうかテストし、存在する場合は隠しフィールドを表示するように設定してください。

最後に、チェックボックスをオンにすると、リストに対してもう検証されません(有効なメソッドで2番目のパラメータを使用します。コンテキストと呼ばれ、フォームのすべてのフィールドが含まれます)。

関連する問題