2011-01-12 49 views
0

下午好,正則表達式或等同於接受浮點數的文本框 - asp.net C#

我需要幫助解決以下問題:

我需要限制值的範圍到一個文本框。 我已經在文本框中允許的最小值和最大值,但缺少中間值。

一個例子:

從最小值-2,00到最大值0,00它接受:-2,00 | -1,75 | -1,50 | -1,25 | -1,00 | -0,75 | -0,5 | -0,25 | 0,00

從最小值0,00到最大值1,00它接受:0,00 | 0,25 | 0,50 | 0,75 | 1,0

等等。

什麼是最好的辦法呢?

謝謝。

回答

0

您可以使用CustomValidator並編寫自己的驗證方法來檢查值是否爲0.25的倍數。您可以添加此頁面:

<asp:CustomValidator 
    ID="NumericInputValidator" 
    ControlToValidate="NumericInput" 
    Display="Dynamic" 
    runat="server" 
    OnServerValidate="ValidateNumericInput" 
    ErrorMessage="The given input must be a numberic value and it must be a multiple of 0.25" /> 

然後添加像這樣到後面的代碼:

protected void ValidateNumericInput(object sender, ServerValidateEventArgs args) 
{ 
    decimal value; 
    IFormatProvider formatProvider = CultureInfo.CurrentCulture; // Change this to the desired culture settings. 
    bool isNumber = decimal.TryParse(args.Value, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, formatProvider, out value); 

    // The number must be a multiple of 0.25, so when multiplied by 4, it should be an integer. 
    args.IsValid = isNumber && decimal.Truncate(value * 4) == value * 4; 
} 
0

您應該使用CustomValidator並讓它檢查給定驗證器參數的步驟。類似於一個RangeValidator,但有一些自定義邏輯。

2

^(-[12]|[01]),00|(-[01]|0),(50|[27]5)$

(無法添加評論。) @Filipe科斯塔 - 我不知道最小最大,我認爲這將只是驗證由左到右。如果設置了^ $錨,則有4個字符的確定長度。

(不能添加其他評論..)
@Filipe Costa - 基於特徵的驗證變得越來越難,更多的列。我會讓控件對每個按鍵進行數字驗證。

這是一個基於-127- 128字符的驗證測試用例(在Perl中),用於顯示您獲得的列越多越多。

use strict; 
use warnings; 

my $rx_128 = qr/ 
^ (?: 
     - [1-9] (?: (?<=1)\d(?:(?<=[01])\d?|(?<=2)[0-7]?) | \d?) 
    |  \d (?: (?<=1)\d(?:(?<=[01])\d?|(?<=2)[0-8]?) | \d?) 
    ) 
    $ /x; 

# Test range -127 to 128 

my $count = 0; 
for (-5000 .. 5000) 
{ 
    if (/$rx_128/) 
    { 
     print $_,"\n"; 
     $count++; 
    } 
} 
print "\nOK = $count\n"; 
+0

是否可以解釋在我最小最大值的聲明? – 2011-01-12 18:02:48