2011-12-30 10 views
1

以下の式は、asp.netによる電子メールの検証には適していますが、開始時と終了時には空白を使用できません。開始と終了時に空白を許可する正規表現のバリデータ

^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$ 

空白を許可する方法はありますか。

完全なasp.netマークアップですが、検証前にトリミングできません。

<asp:TextBox ID="txtEmail" runat="server" MaxLength="100" CssClass="textbg text"></asp:TextBox> 

<asp:RegularExpressionValidator ID="EmailValidator" runat="server" ErrorMessage="Email is not vaild." 
      ForeColor="Red" ControlToValidate="txtEmail" ValidationExpression="^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$" 
      ValidationGroup="register">Email is not vaild.</asp:RegularExpressionValidator> 
+1

はあなたが*希望*空白できるようにする理由はありますか? – GalacticCowboy

+3

なぜ正規表現を適用する前にトリミングしませんか? –

+1

* W ell *は非常に相対的な用語です。私は電子メールアドレスを検証することができない多くの正規表現を見たことがありません。特に '([a-zA-Z] {2,5}){1,25}'の部分で私は笑っていました。 'a @ b.cde @ f.gh'がどのように有効なアドレスと見なされるかも涼しくしてください。 –

答えて

4

妥当性チェックの前に入力をトリミングすることを示唆している前の点をエコーし​​ます。空白を削除または無視するのは非常に一般的な要件です。そのため、バリデーターが処理できない場合は非常に驚きます。

私は、どちらかの端にあるスペースが無効な電子メールアドレスであることを指摘します。有効なものとして渡すことは技術的に間違っています。

しかし、それをトリムすることができず、それを渡す必要がある場合、正規表現を修正して両端の空白を許すのは簡単です。

空白は、正規表現で\sで表されます。ゼロ以上の空白は\s*となります。

したがって、あなたがする必要があるすべてがそうのように、\s* to the start and end of the expression, immediately inside the^and $ `開始と終了マーカーを追加です:......は、電子メールアドレス(おそらくないものを検証するための式を表す

/^\s*(.......)\s*$/ 

(あなたは)質問に引用されてきました。助け

希望。

+0

\ wは単語文字に一致します。 \ sは空白です。 –

+0

@ElroyFlynn - heh。明らかな間違いを発見してくれてありがとう。修正しました。私は疲れたときに本当に質問に答えるべきではありません。 ;-) – Spudley

+0

@Spudley恐ろしい!どうもありがとうございました。あなたは私が欲しいと思ったことを正確に行いました – Shahdat

1

正規表現を使用した電子メールの検証は容易ではありません。 ASP.NETを使用しているので、同じ正規表現MailAddressを使用することができます。おそらくほとんどの電子メールアドレスは無効になることはないので、Try...Catch操作はあまりにも高価であってはなりません。

MailAddress mailAddress; 

try 
{ 
    mailAddress = new MailAddress(txtEmail.Text); 
} 
catch (Exception ex) 
{ 
    //Email considered invalid 
} 

編集2 - この1つはバリで動作するはずです:

(\s?)+\w+(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*(\s?)+ 

ただ、注意して、それが正規表現のほとんどをバイパスすることは非常に簡単ですので、電子メールの検証は、信頼性の高いとみなすことはできません。

+0

こんにちは私はクライアント側の検証ではなく、サーバー側が必要です。 – Shahdat

+0

パフォーマンス上の理由から、 'RegularExpressionValidator'はクライアント(利用可能な場合)とサーバー側の両方の検証を使用します。私はJavascript検証(例:http://www.white-hat-web-design.co.uk/blog/javascript-validation/)を行い、値としてトリムされたテキストボックスを渡します。成功した場合は、上記のサーバー側の検証を実行し、そうでない場合はエラーメッセージを表示します。 – keyboardP

+0

私は知っている、我々は多くの方法で検証します。しかし、私は両方の空白を許可する正規表現をしたい – Shahdat

関連する問題