簡體   English   中英

正則表達式為十進制值和可選字符串

[英]Regex for decimal value and optional string

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

有效

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

無效

  • 7,75
  • 11
  • 7這是我的字符串
  • 這是我的字符串
  • 10.5字符串

我得到了這個來獲取小數值,但我不知道如何獲得它背后的可選文本。

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

根據您的示例判斷,初始數字后面的空格不是可選的。 因此,您可以使用的模式是

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

或者 - 因為與Regex.IsMatch的部分匹配足以驗證字符串 - 用負前瞻(?!\\S)替換(?:\\s.*)?$ ,這將需要在數字后面的空格或字符串結尾:

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

請參閱正則表達式演示

細節

  • ^ - 字符串的開頭
  • (?:10|[1-9](?:[.,][0-9])?) - 1019的數字,然后是a的可選序列,. 和任何一個數字,然后......
  • (?:\\s.*)?$ - 任意空格的可選序列,后跟任何字符串直到字符串的結尾 - 或者 -
  • (?!\\S) - 如果當前位置右側沒有非空格字符,則會導致匹配失敗的否定前瞻。

C#測試

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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM