2017-04-27 72 views
1

我正在尋找一個正則表達式來驗證評級(1-10)+可選文本。 評分是一個小數,有1分,可以同時使用點或逗號分隔符。 後面跟着一個可選的空格+字符串。十進制值和可選字符串的正則表達式

有效

  • 7,5
  • 7.5
  • 7,5這是我的字符串
  • 7.5你好

無效

  • 7,75
  • 7This是我的字符串
  • 7,本是我的字符串
  • 10.5串

我有這樣來十進制值,但我我不知道如何獲得它後面的可選文本。

^(10|\d)([\.\,]\d{1,1})?$ 
+0

也許['^(?: 10 | \ d)(?:[,] \ d)?(:\ s +。*)?$'](https://regex101.com/r/XSty0I/1)將按預期工作。但在這裏,號碼後需要一個空格。 –

+2

如果空格可能丟失,並且您可能會輸入如'7這是我的字符串',請嘗試['^(?: 10 | \ d)(?:[。,] \ d)?(?:[^ \ d ,。]。*)?$'](https://regex101.com/r/XSty0I/2)。然而,'7.這是我的字符串'然後不會被驗證。 –

+2

允許使用'0.5'和'10.3'嗎?你說你想匹配'1-10',但是你的正則表達式匹配'0'和'0.5'和'10.3' – Toto

回答

3

從你的例子來判斷,初始數字之後的空格不是可選的。因此,可以使用該圖案是

^(?:10|[1-9](?:[.,][0-9])?)(?:\s.*)?$ 

或 - 由於具有Regex.IsMatch部分匹配是足夠驗證串 - 具有負先行(?!\S),這將需要一個空格或數後字符串的末尾替換(?:\s.*)?$

^(?:10|[1-9](?:[.,][0-9])?)(?!\S) 
          ^^^^^^^ 

regex demo

詳細

  • ^ - 串
  • (?:10|[1-9](?:[.,][0-9])?)的開始 - 無論是10或從19數字,後面帶有,.和任何單個數字,然後的可選序列...
  • (?:\s.*)?$ - 一個任意空格後面跟隨任意字符的可選序列,直到字符串末尾 - 或 -
  • (?!\S) - 如果在當前位置右側沒有非空白字符,則表示匹配失敗。

C# test

var strs = new List<string> { "7","7,5","7.5","7,5 This is my string","7.5 Hello","7,75","11","7This is my string","7.This is my string","10.5 string"}; 
var pattern = @"^(?:10|[1-9](?:[.,][0-9])?)(?:\s.*)?$"; 
foreach (var s in strs) 
    if (Regex.IsMatch(s, pattern)) 
     Console.WriteLine("{0} is correct.", s); 
    else 
     Console.WriteLine("{0} is invalid.", s); 

輸出:

7 is correct. 
7,5 is correct. 
7.5 is correct. 
7,5 This is my string is correct. 
7.5 Hello is correct. 
7,75 is invalid. 
11 is invalid. 
7This is my string is invalid. 
7.This is my string is invalid. 
10.5 string is invalid. 
+0

如果正則表達式行爲仍然不如預期,請在此處放置評論。 –

+1

謝謝!偉大的作品 –

+0

我認爲最後一部分'(?:\ s。*)?$'也可以寫成'(?:\ s | $)' – silel