【问题标题】:alphanumeric regex on a substring子字符串上的字母数字正则表达式
【发布时间】:2012-02-02 19:34:54
【问题描述】:

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

我想做什么:

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

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

请求

一些代码向我展示了完成此任务的正确方法

或指出我的代码错误的地方

等等。

感谢所有帮助!

【问题讨论】:

  • Substring(16) starts 子字符串从那一点开始,它不会从结尾开始(除非你对字符串长度很幸运。)
  • 如果我不知道最后 16 个字符之前的内容怎么办?

标签: c# regex string substring


【解决方案1】:

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

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

您现在遇到的问题是.Substring(16) 将返回字符串中包含位置 16 之后的所有字符 - 不是最后 16 个字符。而且,你已经不区分大小写了,所以:

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

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

【讨论】:

    【解决方案2】:

    Substring 的参数是开始的索引。

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

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

    【讨论】:

    • 这就是我认为我需要做的事情。是否有可能在一行中做到这一点?
    • @toosweetnitemare - 当然,但你失去了很多可读性。为什么要在没有意义的一行上做呢?
    • 在我构建这个应用程序后我不会管理它。代码的“经理”要求我以这种方式编码。看起来 minitech 给了我这个解决方案。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多