2017-02-27 113 views
1

我需要以下條件需要與多個條件

正則表達式的正則表達式表達
  • 應該接受的最大的5個數字則高達3位小數
  • 也可以是負
  • 它可以是零
  • 它只能是數字(最多可達5位數)
  • 它可以爲空

我曾嘗試以下,但它不是,它不是滿足所有的條件

@"^([\-\+]?)\d{0,5}(.[0-9]{1,3})?)$" 

例如最大值可以容納從-99999.999到99999.999

+0

首先,你需要像'\ .'那樣逃避'''.'。當它是一個光點時,它意味着「任何角色」,這肯定會給你帶來一些痛苦。如果可以,我建議在正則表達式之外進行空白/空白檢查。像:'valueIsOk = value.blank? || value.match?(正則表達式)'。如果沒有,只需在最後一個右括號之外敲擊另一個「?」。 – mroach

+0

你的第四條規則與你的第一條規則相矛盾。您的模式實現了規則中沒有說明的開始行和行結束規則。沒有正則表達式可以處理'null':你的意思是'空'嗎?如果我把它作爲規範給出,我會拒絕它作爲含糊不清的。 – EJP

+1

@EJP如果你覺得這樣,那麼你爲什麼回答? –

回答

1

使用此正則表達式:

^[-+]?\d{0,5}(\.[0-9]{1,3})?$ 

我只做了兩處更改。首先,不需要通常需要轉義字符類中的任何字符,除了括號內的開合括號或可能的反斜槓本身。因此,我們可以使用[-+]來捕獲一個初始正值或負值。其次,你需要逃避你的正則表達式中的點,以告訴引擎你想匹配一個文字點。

不過,我想大概這句話正則表達式如下:

^[-+]?\d{1,5}(\.[0-9]{1,3})?$ 

這將匹配一個五位數字,後跟一個可選的小數點,然後是一個三位數。

請注意,我們想捕捉的東西,如:

0.123 

但不是

.123 

即我們不希望捕捉到一個領先的小數點應該是不被至少一個前綴數。

演示在這裏:

Regex101

+0

對不起混淆...達到我的意思是5位數字達到99999或達到小數點後三位我意思是.999,它可以容納的最大值 – Mahajan344

+0

^[ - +]?\ d {0,5}(\。[0-9] {1,3})?$是完美的,因爲它允許.123和0。123,用戶通常在十進制前輸入0 – Mahajan344

0

我假設你正在C#中完成這項工作,給定了符號。這裏有一些代碼可以用來測試你的表達式,有兩個更正:

  1. 你必須轉義點,否則它意味着「任何字符」。所以,\.代替.
  2. 有來自編譯

C#防止表達外來右括號:

var expr = @"^([\-\+]?)\d{0,5}(\.[0-9]{1,3})?$"; 
var re = new Regex(expr); 
string[] samples = { 
    "", 
    "0", 
    "1.1", 
    "1.12", 
    "1.123", 
    "12.3", 
    "12.34", 
    "12.345", 
    "123.4", 
    "12345.123", 
    ".1", 
    ".1234" 
}; 
foreach(var s in samples) { 
    Console.WriteLine("Testing [{0}]: {1}", s, re.IsMatch(s) ? "PASS" : "FAIL"); 
} 

結果:

Testing []: PASS 
Testing [0]: PASS 
Testing [1.1]: PASS 
Testing [1.12]: PASS 
Testing [1.123]: PASS 
Testing [12.3]: PASS 
Testing [12.34]: PASS 
Testing [12.345]: PASS 
Testing [123.4]: PASS 
Testing [12345.123]: PASS 
Testing [.1]: PASS 
Testing [.1234]: FAIL 
+0

抱歉混淆... upto我的意思是5位數達到99999或達到小數點後三位小數位.999最大可以容納 – Mahajan344

0

應該接受的最大的5個位數

[0-9]{1,5} 

則高達3位小數

[0-9]{1,5}(\.[0-9]{1,3})? 

它可以是負

[-]?[0-9]{1,5}(\.[0-9]{1,3})? 

它可以是零

已經覆蓋。

它只能是數字(最多高達5位數的地方)

已經覆蓋。 '最多5位數'與您的第一條規則相抵觸,允許5.3。

它可以爲null

不包括在內。我強烈建議您刪除此要求。即使你的意思是'空',但我真誠地希望你能做到,你應該事先分開檢測這種情況,因爲你必須以不同的方式處理它。

您的正則表達式包含^$。我不知道爲什麼。在您指定的規則中沒有關於行首或行尾的內容。它也允許領先的+,這也是你的規則中沒有指定的。