2012-02-02 164 views
0

我知道正则表达式和子字符串是这里的常见问题,但我似乎无法将我正在阅读的内容与实际应用程序关联起来。字符串上的字母数字正则表达式

我想要做什么:

一个字符串,看字符串的最后16个字符,并确保它的字母数字。以下是我所想到的。

if (Regex.IsMatch(STRINGTOCHECK.ToLower().Substring(16), @"^[a-zA-Z0-9]*$")) 

要求

显示我的正确途径一些代码来完成这个

或指出其中我的代码是错误的

所有帮助表示赞赏!

+1

'子串(16)'_starts_在该点串,它不会从月底开始,远远的(除非你是幸运的字符串长度。) – 2012-02-02 19:38:17

+0

如果我不知道那些之前会发生什么最后16个字符? – toosweetnitemare 2012-02-02 19:39:08

回答

4

您需要确保最后16个字符是字母数字?只需使用正则表达式:

[a-zA-Z0-9]{16}$ 

你现在的问题是,.Substring(16)会后返回字符串中的所有字符,其中包括16位 - 最后的16个字符。更重要的是,你已经不区分大小写的,所以:

if(Regex.IsMatch(STRINGTOCHECK, @"[a-zA-Z0-9]{16}$")) 

最后$锚确保最后的16个字符被匹配。

+0

感谢@minitech!这就是我一直在寻找的东西。 – toosweetnitemare 2012-02-02 19:44:21

1

参数Substring是从开始的索引

所以,要得到一个子字符串最后 16个字符,您需要从字符串长度中减去16。

string last16 = STRINGTOCHECK.Substring(STRINGTOCHECK.Length - 16); 
if(Regex.IsMatch(last16, @"^[a-zA-Z0-9]*$") 
{ 

} 
+0

这就是我想我需要做的事情。有可能在一行中做到这一点? – toosweetnitemare 2012-02-02 19:39:54

+0

@toosweetnitemare - 当然,但你有很多可读性。为什么在一条线上表现得不那么合理? – Oded 2012-02-02 19:40:50

+0

我不会在构建它之后管理这个应用程序。代码的“经理”已经要求我这样编码。看起来像minitech给了我这个解决方案。感谢您的帮助。 – toosweetnitemare 2012-02-02 19:43:57

相关问题