[英]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+|$)
如下:
如果我說對了,應該是
Regex answerRegex = new Regex(@"^[1-9][0-9]*$");
用*
而不是+
傳遞1、10等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.