簡體   English   中英

文本框的正則表達式只接受數字,逗號而不是0,十進制或特殊字符

[英]Regex for textbox to accept only numbers, comma and not 0, decimal or special characters

我正在尋找一個正則表達式,僅接受數字和逗號,但不接受0,十進制,特殊字符,負數和數字之間的空格。它可以在值的開頭和結尾處允許空格。也應允許10,100,20為0,但我不希望文本框允許單個數字零。

我嘗試了多種選擇,但是找不到解決我問題的選擇。

string testAnswer = textbox.value;
Regex answerRegex = new Regex(@"\s+(?<!-)[1-9][0-9,]*\s+");
if (testAnswer.Contains(","))
{
    testAnswer = testAnswer.Replace(",", "");
    Response.Write(testAnswer);
}
Match answerMatch = answerRegex.Match(testAnswer.Trim());
if (testAnswer == String.Empty || !answerMatch.Success)
{
    valid = false;
    answer.CssClass = "error";
}           
else
{
    answer.CssClass = "comp";
}

我認為這會做您想要的。

(\s+|^)(?<!-)[1-9][0-9,]*(\s+|$)

編輯:我想我在您的代碼中找到您的問題。 您僅根據“ Success屬性進行檢查。 您還需要在代碼中檢查answerMatch.Groups

如果在輸入7+9字符串時選中了answerMatch.Groups[0] ,您將意識到匹配項僅匹配7並丟棄字符串的其余部分(+9)。

好的,我已經對此進行了更廣泛的測試,並且我確信現在可以使用了。 我對您的代碼做了一些修改,以便可以用它來演示測試。

        string testAnswer = "7 7+9700 700 007 400 -7 8";
        bool valid = true;
        string retVal = "";
        Regex answerRegex = new Regex(@"(\s+|^)(?<!-)[1-9][0-9,]*(\s+|$)");
        if (testAnswer.Contains(","))
        {
            testAnswer = testAnswer.Replace(",", "");
            retVal = testAnswer;
        }
        MatchCollection answerMatch = answerRegex.Matches(testAnswer.Trim());
        if (testAnswer == String.Empty || answerMatch.Count <= 0)
        {
            valid = false;
            retVal = "error";
        }           
        else
        {
            retVal = "comp";
            foreach(Match m in answerMatch) {
                Console.WriteLine(m.Groups[0].Value);
            }
        }

testAnswer持有我要檢查的測試字符串。 測試程序的輸出如下:

7 
 700 
 400 
8

該輸出證明它拒絕負數以及數字字符串中的特殊字符。

至於正則表達式字符串(\\s+|^)(?<!-)[1-9][0-9,]*(\\s+|$)如下:

  • `(\\ s + | ^)匹配字符串的開頭或前導空格。
  • (?
  • [1-9] [0-9,] *與您感興趣的數字(包括逗號)匹配。
  • (\\ s + | $)匹配尾隨空格或字符串結尾。

如果我說對了,應該是

Regex answerRegex = new Regex(@"^[1-9][0-9]*$");

*而不是+傳遞1、10等。

暫無
暫無

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

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