如何检查用户输入的格式是否正确

3

这是我目前想到的内容

private void CheckFormatting()
{
    StringReader objReaderf = new StringReader(txtInput.Text);
    List<String> formatTextList = new List<String>();

     do
     {
         formatTextList.Add(objReaderf.ReadLine());
     } 
     while (objReaderf.Peek() != -1);

     objReaderf.Close();
     for (int i = 0; i < formatTextList.Count; i++)
     {

     } 
}

它的设计目的是检查用户是否以Gxx:xx:xx:xx JGxx的格式输入了信息,其中"x"可以是任何整数。
如您所见,用户将其数据输入到多行文本框中。然后我将该数据输入到列表中。接下来的部分是我卡住的地方。我创建一个for循环逐行遍历列表,但我想也需要逐个字符地遍历每一行。我该怎么做?还是有更快的方法吗?
感谢您的帮助。

1
使用 MSDN 获取有关正则表达式的帮助 - http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regex.aspx - Pavel Belousov
4个回答

1

最佳实践是在用户输入数据时验证其输入,并在输入设计中明确格式应该是什么。

您可以为每个数字部分添加一系列由“:”分隔的文本框,然后验证每个文本框的数值。

我猜这是一个ASP.NET页面?如果是的话,那么您可以在客户端和服务器上使用ASP.NET验证器。

例如:

<asp:textbox id="textbox1" runat="server"/>
<asp:RegularExpressionValidator id="valRegEx" runat="server"
    ControlToValidate="textbox1"
    ValidationExpression="[0-9]*"
    ErrorMessage="* Your entry is not a valid number."
    display="dynamic">*
</asp:RegularExpressionValidator>

哦,是的,我已经在文本框上方非常清楚地说明了它应该采用的格式,但你知道有些人就是不会读它,然后当出现问题时就会尖叫和抱怨,所以有一个安全网还是很好的。不,它不是asp.net。它是一个基于Windows的应用程序,用于存储、更新和查看数据。基本上它是一个加速数据输入的应用程序。 - Arcadian
好的,我知道WinForms有自己的验证器,但从未使用过。你仍然可以应用类似的解决方案。 你也可以为每个框重写OnKeyDown,并拒绝任何非数字字符。 - Sonic Soul

1

试试这个。

    if (!System.Text.RegularExpressions.Regex.IsMatch("your_text", "G[0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{2} JG[0-9]{2}"))
    {
        //Error!
    }

好的,我需要测试一下,但是它应该长这样,然后如果 (Regex.IsMatch(formatTextList[i], "G[0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{2} JG[0-9]{2"))。 - Arcadian
什么异常被抛出了?你的WriteToFile方法正在抛出一个异常。 - user347594
不,这个方法没有抛出异常,我之前测试过了。这是一个构建错误。它不允许我使用“else”这个术语。如果我把它拿掉,那么就没有构建错误了。但是我需要“else”这部分才能让应用程序做我想要的事情。 - Arcadian
我得到了“else”无效表达式术语。但我看不出哪里有无效的问题。 - Arcadian

1

正则表达式是快速完成它的方法。


我对C#还很陌生,所以这对我来说一点意义都没有。抱歉。你能详细说明一下吗? - Arcadian
正则表达式就像文本格式的速记一样。任何给定的输入要么与给定的正则表达式匹配,要么不匹配。有些用于日期、社会保障号码等的正则表达式。.net支持一些正则表达式。请参见以下链接并尝试Google: http://en.wikipedia.org/wiki/Regular_expressions - Vivian River

1

使用正则表达式 在您的情况下,G\d\d:\d\d:\d\d:\d\d:JG\d\d应该可以工作(没有测试) 使用using System.Text.RegularExpressions命名空间


你能给个例子让我看看它应该长什么样子吗? - Arcadian
啊,抱歉,这是方法: System.Text.RegularExpressions.Regex.IsMatch(your_string, @"G\d\d:\d\d:\d\d:\d\d:JG\d\d"); 它返回一个布尔值。 - FBSC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接