C# 正则表达式匹配:长度 5-24,最多 1 个下划线

本文关键字:最多 下划线 5-24 长度 正则表达式 | 更新日期: 2023-09-27 17:57:14

我想正则表达式匹配一个字符串

  • 仅是字母数字。
  • 字母只能是大写的。
  • 总长度最小 5 个字符,最大 24 个字符。
  • 可以包括最小值 0 最多 1 个下划线出现在除第一个或最后一个位置之外的任何位置。

我想我必须以某种方式嵌套语句,以便总长度为 5-24,但最多可能有一个下划线。我已经阅读了一些正则表达式教程,但无法理解执行此操作的方法。也不知道如何指定下划线的可接受位置(如果存在)。

[A-Z0-9]{5,24}[_]{0,1}

C# 正则表达式匹配:长度 5-24,最多 1 个下划线

如果在 C# 代码中使用它,最好检查正则表达式之外的字符串长度。(可以将其塞进正则表达式中,但我不会在这里显示)。

private static bool Validate(string str) {
    if (str.Length < 5 || str.Length > 24) {
        return false;
    }
    return Regex.IsMatch(str, @"^[A-Z0-9]+(?:_[A-Z0-9]+)?'z");
}

正则表达式是:

^[A-Z0-9]+(?:_[A-Z0-9]+)?'z

如果字符串以换行符结尾,则$可以在新行之前匹配空字符串,因此此处使用'z来断言字符串的结尾。

测试代码

using System;
using System.Text.RegularExpressions;
public class Test
{
    public static void Main()
    {
        string[] fail = {"ABCDacbd", "ACDE", "ABCDE'n", "_01234", "ABCDÉ", "ABCD́Ē", "ABCDEF_", "A_B_CDEF", "AB_C", "1234567890123456789012345", "123456_789012345678901234"};
        string[] ok = {"ACBDEF", "01234", "ABC_DE1", "123456789012345678901234", "12345_789012345678901234"};
        foreach (string s in fail) {
            Console.WriteLine(s + " " + Validate(s));
        }
        Console.WriteLine();
        foreach (string s in ok) {
            Console.WriteLine(s + " " + Validate(s));
        }
    }
    private static bool Validate(string str) {
        if (str.Length < 5 || str.Length > 24) {
            return false;
        }
        return Regex.IsMatch(str, @"^[A-Z0-9]+(?:_[A-Z0-9]+)?'z");
    }
}