C# 中带有“AND”的正则表达式

Kei*_*thL 1 c# regex .net-5

我有以下方法:

        public static bool isUeiFormatOK(string test)
        {
            string pattern = "[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]";
            MatchCollection matches;
            Regex regex = new Regex(pattern);
            matches = regex.Matches(test);

            if (matches.Count == 0)
                return false;

            return true;
        }
Run Code Online (Sandbox Code Playgroud)

这将验证字符串是否为 12 个字符并且包含数字或字母。

我怎么说呢,其中一个字符必须是数字?

The*_*ird 5

您可以使用量词{12}来缩短模式,并使用正向前瞻来断言数字,首先可以选择匹配字符类中不带数字的相同允许字符。

^(?=[A-Za-z]*[0-9])[A-Za-z0-9]{12}$
Run Code Online (Sandbox Code Playgroud)
  • ^字符串的开头
  • (?=[A-Za-z]*[0-9])正向前瞻,断言右侧可选字符 A-Za-z 后跟一个数字
  • [A-Za-z0-9]{12}匹配 12 次出现的字符 A-Za-z 或数字 0-9
  • $字符串结尾(或使用\z

您不必计算匹配的数量,您可以返回 的值IsMatch

public static bool isUeiFormatOK(string test)
{
    return new Regex("^(?=[A-Za-z]*[0-9])[A-Za-z0-9]{12}$").IsMatch(test);
}
Run Code Online (Sandbox Code Playgroud)