2012-03-09 62 views
18

我想开发一个正则表达式来验证一个字符串,它来自我:“TE33”或“FR56”或任何关于2个字母和2个数字的序列。正则表达式 - C中的2个字母和2个数字#

前2个字符必须是字母,最后2个字符必须是数字。

我尝试了很多组合,但没有成功。我试过的最后一个:

if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{2}")){ 
} 
+0

我总是整理这些了上一个正则表达式的测试网站,那么进入vs.net与我所知道的东西从互动测试中工作。 – 2012-03-09 18:57:54

+5

一个好的测试网站会帮助你,例如http://regexhero.net/tester/ – 2012-03-09 18:59:57

+0

适合我的作品。你的传入字符串究竟是什么样的?你想匹配一个字符串的一部分还是4个字符的整个字符串? – 2012-03-09 19:00:07

回答

31

你错过了一个结束锚点。

if(Regex.IsMatch(myString, "^[A-Za-z]{2}[0-9]{2}\z")) { 
    // ... 
}

Here's a demo.


编辑:

if(Regex.IsMatch(myString, @"^[A-Za-z]{2}.*\d{2}\z")) { 
    // ... 
}

Here's a demo.

+0

这应该不重要,除非您确实需要拒绝比预期时间长的字符串。 – 2012-03-09 19:03:04

+0

这也与最后的锚点相匹配,其他的东西可能就是这个问题。 http://ideone.com/wZk6B – 2012-03-09 19:03:13

+0

即使没有$ – ebutusov 2012-03-09 19:03:17

4

这应该让你:如果你能初始2个字母和最后2个数字之间有什么从两个字母开始,以两个数字结尾。

[A-Za-z]{2}(.*)[0-9]{2} 

如果你知道它永远是只有两个和两个可以

[A-Za-z]{2}[0-9]{2} 
4

只是为了好玩,这里是一个非正则表达式(更可读/维护对于我这样的傻瓜)解决方案:

string myString = "AB12"; 

if(Char.IsLetter(myString, 0) && 
    Char.IsLetter(myString, 1) && 
    Char.IsNumber(myString, 2) && 
    Char.IsNumber(myString, 3)) { 
    // First two are letters, second two are numbers 
} 
else { 
    // Validation failed 
} 

编辑

看来我我误解了这些要求。下面的代码将确保前两个字符,最后两个字符的字符串验证的(只要该字符串的长度> 3)

string myString = "AB12"; 

if(myString.Length > 3) {  
    if(Char.IsLetter(myString, 0) && 
     Char.IsLetter(myString, 1) && 
     Char.IsNumber(myString, (myString.Length - 2)) && 
     Char.IsNumber(myString, (myString.Length - 1))) { 
     // First two are letters, second two are numbers 
     } 
     else { 
     // Validation failed 
    } 
} 
else { 
    // Validation failed 
} 
+0

请注意,IsLetter比A-Z更广泛**。您也可以使用相同种类的数字检查。 – 2012-03-09 19:08:18

+0

@AlexeiLevenkov,'A-Z'指出。我以前从未使用过“Char.IsNumber”。感谢您的支持(更新代码)! – 2012-03-09 19:10:09

+0

-1,解决方案不检查后面的内容。 – Qtax 2012-03-09 19:13:54

相关问题