如何使用Regex C#验证这一点

时间:2014-01-21 09:34:47

标签: c# regex

我有一个输入,可以是以下(这三个中的任何一个):

  • 1-8 ...换句话说1,2,3,4,5,6,7,8
  • A-Z ......换句话说,A,B,C,D等
  • 01-98 ...换句话说,01,02,03,04等

我想出了这个正则表达式,但它不能确定原因:

@"[A-Z0-9][1-8]-

我正在考虑在正则表达式检查之后检查角落情况,例如0和9,因为正则表达式检查没有验证这个

5 个答案:

答案 0 :(得分:3)

不确定我理解,但是如何:

^(?:[A-Z]|[1-8]|0[1-9]|[1-8][0-9]|9[0-8])$

<强>解释

(?:...)是一个没有捕获的群体 |引入了替代方案 [A-Z]表示一个字母
[1-8] 1到8之间的一位数字 0[1-9] a 0后跟1到9之间的数字 [1-8][0-9] 1到8之间的数字,后跟1到9之间的数字 9[0-8] 9后跟0到8之间的数字

可能是这样,取决于您的实际需求:

^(?:[A-Z]|[0-9]?[1-8])$

答案 1 :(得分:1)

我认为你可以使用这种模式

@"^([1-8A-Z]|0[1-9]|[1-9]{2})$"

答案 2 :(得分:0)

^([1-8]|([0-9][0-9])|[A-Z])$怎么样?

这将匹配

一个 8(但不是9) 09

答案 3 :(得分:0)

您可以使用以下模式:

^[1-8][A-Z](?:0[1-9]|[1-8][0-9]|9[0-8])$
  • ^[1-8] - 输入应以数字1-8
  • 开头
  • [A-Z] - 然后应该是单个字母A-Z
  • (0[1-9]|[1-8][0-9]|9[0-8])$它应以两个数字结尾,分别为01-19或1​​0-89或90-98

测试:

string pattern = @"^[1-8][A-Z](0[1-9]|[1-8][0-9]|9[0-8])$";
Regex regex = new Regex(pattern);
string[] valid = { "1A01", "8Z98" };
bool allMatch = valid.All(regex.IsMatch);
string[] invalid = { "0A01", "11A01", "1A1", "1A99", "1A00", "101", "1AA01" };
bool allNotMatch = !invalid.Any(regex.IsMatch);

答案 4 :(得分:0)

[1-8]{0,1}[A-Z]{0,1}\d{1,2}

匹配以下所有内容

8A8 8B9 9 0 00