它继续发送缺失数字的else语句。如果我输入“The”,它会读取,但当我输入两个数字时,它表示计数仍为0
。然后将返回else语句而不是去更改标签。为什么呢?
protected void submit_Click(object sender, EventArgs e)
{
string input = textbox.Text;
string s = textbox.ToString();
input = input.Trim();
MatchCollection matches = Regex.Matches(s, @"\d+");
string[] result = matches.Cast<Match>()
.Take(2)
.Select(match => match.Value)
.ToArray();
if (input.StartsWith("The") || input.StartsWith("the"))
{
if (matches.Count == 2)
{
alarm.Text = result[0];
server.Text = result[1];
}
else
{
string script = "alert(\"Missing Number(s)!\");";
ScriptManager.RegisterStartupScript(this, GetType(),
"ServerControlScript", script, true);
}
}
}
答案 0 :(得分:1)
Regex.Matches.Count
正常工作。
您需要替换
string s = textbox.ToString();
带
string s = textbox.Text;
否则,您将分析不同的字符串(textbox
类型字符串)。
此外,您只能将一个变量用于文本框值,并仅在必要时修剪它。
答案 1 :(得分:0)
我就是这样做的。我认为这样更清洁,更容易阅读:
string input = textbox.Text.Trim();
var match = Regex.Match(input, @"^[tT]he\s(\d+)\s(\d+)\b");
if (match.Success && match.Groups.Count == 3)
{
var alarm = match.Groups[1].Value;
var server = match.Groups[2].Value;
}
else
{
string script = "alert(\"Missing Number(s)!\");"; // Or "invalid format".
ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", script, true);
}
您对该输入字符串没有太多说法,因此您可能需要调整该正则表达式。我认为你期望术语之间的空格,并忽略第二个数字之后的任何内容。