2012-05-12 8 views
0

私はこの問題を解決しようと多くの時間がかかりましたが、成功することはありませんでした。 私に必要なのはテキストボックスを検証することです:Keypress ISSUE VB.NET

有効チェーン:

10% 
0% 
1111111.12% 
15.2% 
10 
2.3 

無効チェーン:

.% 
12.% 
.02% 
% 
123456789123.123 

私はKeyPressイベントをサポートし、これらの有効な鎖でテキストボックスを検証する必要があります。

私はしようと試み:

Private Sub prices_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles wholeprice_input_new_item.KeyPress, dozenprice_input_new_item.KeyPress, _ 
      detailprice_input_new_item.KeyPress, costprice_input_new_item.KeyPress 

      Dim TxtB As TextBox = CType(sender, TextBox) 
      Dim fullText As String = TxtB.Text & e.KeyChar 
      Dim rex As Regex = New Regex("^[0-9]{1,9}([\.][0-9]{1,2})?[\%]?$ ") 

      If (Char.IsDigit(e.KeyChar) Or e.KeyChar.ToString() = "." Or e.KeyChar = CChar(ChrW(Keys.Back))) Then 
       If (fullText.Trim() <> "") Then 
        If (rex.IsMatch(fullText) = False And e.KeyChar <> CChar(ChrW(Keys.Back))) Then 
         e.Handled = True 
         MessageBox.Show("You are Not Allowed To Enter More then 2 Decimal!!") 
        End If 
       End If 
      Else 
       e.Handled = True 
      End If 
     End Sub 

注:正規表現は、任意のパーセント記号と(最大小数点以下2桁、および9の整数)を検証しなければなりません。

助けてください、私はあなたがほとんど正しい答えを持っていたことを考える成功

+0

err、KeyPressで検証し、すべてを返信するのはちょっと奇妙です。 Javascript 'onkeyup'を使って検証し、サーバー側で検証するのはなぜですか**複数のポストバックではなく、文字列全体のみですか? –

答えて

1

せずに問題を解決しようとするので、イライラを感じます。あなたが提供したサンプルに対してあなたの正規表現を実行すると、それらはすべて失敗します。しかし、私が正規表現の最後に余分なスペースを削除すると、私は期待される成功と失敗を得ます。

だから、現在お使いの正規表現は次のようになります。

Dim rex As Regex = New Regex("^[0-9]{1,9}([\.][0-9]{1,2})?[\%]?$ ") 

、それは

Dim rex As Regex = New Regex("^[0-9]{1,9}([\.][0-9]{1,2})?[\%]?$") 

EDITのようになります。私はより多くの問題を理解

[OK]をクリックします。正規表現の問題は、1つまたは2つの数字が続く場合にのみピリオドを許可するということです。誰かが入力を終えた後にテキストボックスの値を評価しているなら、うまくいきます。しかし、あなたのコードでは、それぞれのキー入力に対して評価しているので、 "。"の後ろに数字を入力する機会はありません。

私は

  1. 変更にあなたがおそらく唯一の正規表現を評価する方法を把握しようと、正規表現を評価する際に1
  2. 有効なエントリなどの変更を許可する正規表現を2つの解決策を見ることができます人は入力を一時停止しました。

あなたはオプション1と一緒に行った場合、我々はそれがテキスト文字列(\.)に3つのオプションの終末を受け入れるように、私は正規表現を変更し、この

"^[0-9]{1,9}((\.)|(\.[0-9]{1,2}(%)?)|(%))?$" 

のようなものに正規表現を微調整する必要ができるようになりますピリオドで終わる文字列、(\.[0-9]{1,2}(%)?)は、終わりの文字列の後に1つまたは2つの数字とオプションのパーセント記号が続くことを許可し、(%)は、文字列がパーセント記号で終わることを許可します。私は12%のようなものを有効にしたくないので、3つのオプションにエンディングを壊しました。これが機能するためにも、あなたはまた、if文

If (Char.IsDigit(e.KeyChar) Or e.KeyChar.ToString() = "." Or e.KeyChar.ToString() = "%" Or e.KeyChar = CChar(ChrW(Keys.Back))) Then 

ときに誰かの種類パーセント記号正規表現実行されるように、あなたの最初にパーセント記号を追加する必要があります。

+0

正規表現のスペースを削除しましたが、同じ問題が残っています。 –

+0

aを入力したときにのみコードが失敗しますか? –

+0

私は書き込み時にエラーメッセージを表示します。(例) –