【问题标题】:I want make some validation string that match the format below我想做一些符合以下格式的验证字符串
【发布时间】:2016-05-11 12:03:09
【问题描述】:

我有一个文本框,我想验证它是否匹配模式 Car Plate = [X]__[####]_[ZZZ]

  • [X] = 一个大写字母
  • _ = 空格
  • [####] = 四位数字
  • [ZZZ] = 三个大写字母

例如:A 1234 BCD

如何在文本框中设置验证以匹配此内容?

这是我的迪米特里先生的代码

private void isvalidplate(string a)
    {
        if (a[0] < 'A' && a[0] > 'Z')
        {
            MessageBox.Show("Car Plate is invalid!");
        }
        else if (a[1] != ' ' && a[5] != ' ')
        {
            MessageBox.Show("Car Plate is invalid!");
        }
        else if (a[2] != Int64.Parse(a) && a[3]!= Int64.Parse(a) && a[4]!= Int64.Parse(a) )
        {
            MessageBox.Show("Car Plate is invalid!");
        }
        else if ((a[6] < 'A' && a[6] > 'Z')&&(a[7] < 'A' && a[7] > 'Z')&&(a[8] < 'A' && a[8] > 'Z')&&(a[9] < 'A' && a[9] > 'Z'))
        {
            MessageBox.Show("Car Plate is invalid!");
        }
    }

但它显示“输入字符串格式不正确”的错误 错误在这一行

else if (a[2] != Int64.Parse(a) && a[3]!= Int64.Parse(a) && a[4]!= Int64.Parse(a) )

【问题讨论】:

标签: c# validation textbox


【解决方案1】:

在许多语言中用于字符串验证和解析的常用工具是正则表达式(通常称为正则表达式)。作为开发人员,习惯使用它们非常方便。匹配您需要的正则表达式如下所示:

^[A-Z]\s\d{4}\s[A-Z]{3}$

This site 显示您的正则表达式。在 C# 中,您可以使用 Regex 库测试您的字符串:

bool valid = Regex.IsMatch(myTestString, @"^[A-Z]\s\d{4}\s[A-Z]{3}$");

有大量在线学习正则表达式的资源。

【讨论】:

  • 我之前忘了提,我的讲师不允许使用正则表达式先生 :(
  • 呸。如果这是家庭作业,那么你必须表现出努力,而不仅仅是要求答案。
  • Sp 你必须实现一个显式测试:public static String IsCarPlateValid(String value) { if (String.IsNullOrEmpty(value)) return false; if (value.Length != 9) return false; ... return true;}
  • 我尽力了,先生,但在这种情况下,我只是被卡住了,先生,我尝试使用子字符串,但它只是返回我的字符串,以及如何验证“一个大写”和其他特定的字符串
  • @Andreas Gustavian:一个大写(value[0] &gt;= 'A' &amp;&amp; value[0] &lt;= 'Z'),直接比较
【解决方案2】:

所以你必须实现显式测试:

public static String IsCarPlateValid(String value) {
  // we don't accept null or empty strings
  if (String.IsNullOrEmpty(value))
    return false;

  // should contain exactly 11 characters
  //  letter{1}, space {2}, digit{4}, space{1}, letter{3}  
  //  1 + 2 + 4 + 1 + 3 == 11
  if (value.Length != 11)
    return false;

  // First character should be in ['A'..'Z'] range;
  // if it either less than 'A' or bigger than 'Z', car plate is wrong
  if ((value[0] < 'A') || (value[0] > 'Z'))
    return false;

  //TODO: it's your homework, implement the rest

  // All tests passed
  return true;
}

测试您的实现,您可以使用正则表达式:

Boolean isValid = Regex.IsMatch(carPlate, "^[A-Z]{1} {2}[0-9]{4} {1}[A-Z]{3}$");

含义明显:一个字母、两个空格、四个数字、一个空格、三个字母。

【讨论】:

  • 我已经编辑了我的代码先生,但是当我尝试将值解析为 int 时它显示错误,我的代码是否出错了先生?
  • @Andreas Gustavian:请使用 chars,而不是 ints,例如测试value[3] 是否为digitif ((value[3] &lt; '0') || (value[3] &gt; '9')) MessageBox.Show("not a digit!");
  • @Andreas Gustaviano:不客气!现在,您必须实现例程;小心&amp;&amp;||loops 的另一个问题是:long ifs like (a[6] &lt; 'A' || a[6] &gt; 'Z') || ... || (a[106] &lt; 'A' || a[106] &gt; 'Z') look ugly; for 循环在上下文中是更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
相关资源
最近更新 更多