2012-03-20 5 views
0

ASP.NET用の電子メールバリデータを100文字の制限で作成しました。それはすべて正常に働いたし、20分後に私はリフレッシュし、私は次のエラーが表示されます。電子メールの検証と文字制限

解析 "[ - + W \ @(+] + W \ [。)+ W \([ - ] + W \) \ + W。([ - ] \ + W)] {0,100}" - [xy]の範囲は逆です。説明:現在のWeb要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。例外の詳細:System.ArgumentException: "[\ w +([ - +。] \ w +) @ w +([ - 。] \ w +)。\ w +([ - 。] \ w +)] {0,100} " - [xy]は逆の範囲にあります。

だから私のコードは<asp:RegularExpressionValidator ID="emailReg" runat="server" ControlToValidate="email" ValidationExpression="[\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*]{0,100}" Text="&nbsp;<img src='err.png' alt='*' title='Please enter a valid email address less than 100 characters long'>" ErrorMessage="Please enter a valid email address less than 100 characters long"></asp:RegularExpressionValidator>

あるいずれかが突然間違っているものを教えてもらえますか?私は何も変えていない。

答えて

1

正規表現は最初はうまくいきませんでした。おそらく有効ではないでしょうし、あなたが期待していることをしていないでしょう。代わりに文字クラスの内容として、文字クラス[ ]{1,100}であなたの全体の正規表現、文字クラスを正規表現として解釈されていない内のすべてを含めることにより

あなたの正規表現は\wの100に0と一致して、ある

+*(、...など

エラーが内ハイフンから来ている:私は正規表現[a-z]をすれば、それは「試合を意味し、 aとzの間のすべての文字(包含する)」。

あなたの正規表現は、[-+[-.を持って[]{0,100}内のすべての。したがって、「[+の間のすべての文字を一致させる」と言います。これは、Unicode文字で定義されます。 +は、あなたが後ろから前にあるUnicodeのポイント91と43の間のすべての文字を選択しようとしているので、あなたが取得しているエラーメッセージがあるユニコード43

ありながら、左角括弧[は、Unicodeの91を持っています。

とにかく正規表現を修正するには、[]から取り出してください。正規表現での100文字の制限を強制する

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

、あなたは先読みを使用する必要があります:

^(?=.{0,100}$)\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 

^(?=.{0,100}$)は必ず文字列の中で最も100文字であります。これが真であれば、残りの正規表現はそれを検証します。

+0

おかげさまでヒープ!できます。 :) – dpDesignz

関連する問題