2016-06-14 16 views
1

電子メールフィールドを検証するために検証アノテーションを使用しています。ここでは電子メールフィールドは必須ではありませんが、依然としてサブミットをクリックすると、フィールドが空のときに検証およびスローエラーメッセージ空白のフィールドで@Patternの検証

ここで

注釈です:

@Pattern(regexp = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$", 
      message = "registration.label.useremailformat.invalidformat") 
@Size(min = 6, max = 20, message = "registration.label.useremail.length") 
@SafeHtml 
private String userEmailId; 

どのように私は、電子メールフィールドが空の場合@Pattern検証をスキップして、値が与えられている場合にのみ検証することができますか?どんな助けも高く評価されます。

+1

文字クラスの '-'の位置が間違っています – rock321987

+0

パターンにはテキストが必要です。 * [A-Za-z0-9 - ] +(\\。[A-Za-z0-9 - ] +)* @ [A-Za-z0-9 - ] + (\\。[A-Za-z0-9] +)*(\\。[A-Za-z] {2、}))?また、 'min'パラメータをチェックしてください。 –

+0

@WiktorStribiżew - エラーメッセージは表示されませんが、フォームは送信されません。 – Thej

答えて

0

@Size制限は、正規表現パターン全体をオプションにした後でもフォーム提出を許可しないという問題があるようです。 - 前外側(?:...)?は空の文字列に一致するように、あなたのパターンは、それが可能に囲み、そして(?=.{6,20}$)がいることを肯定先読みである

regexp = "^(?:(?=.{6,20}$)[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+‌​‌​)*(\\.[A-Za-z‌​]{2,}))?$" 

:私はお勧め

この問題を回避するには、正規表現パターンにサイズ制限を移動していますパターンにマッチする - テキストに6〜20文字があるかどうかをチェックします。より少ないまたはより多くの場合、一致は失敗します。

唯一の欠点は、エラーメッセージを1つだけ表示できることです。

0

空の文字列@Sizeを削除できるように、あなたの正規表現を変更します。<<old regex>>は、あなたの現在の長い正規表現のためのプレースホルダです

@Pattern("^$|(<<old regexp>>)") 
@SafeHtml 
private String userEmailId; 

を...。

関連する問題