正则表达式需要将字母数字字符串与一个数字的最小值进行匹配向前看只检查第二个位置

Regex needs to match alphanumeric string with min of one number look ahead only checks second postion

我一直在尝试解决这个问题,现在不得不求助于各位好人。

我多次发现以下正则表达式模式,根据我的阅读,它应该有效,但实际上似乎无效

\b(?=.\d)(?i)[a-z\d]{3,}\b

它的问题是,如果字符串的第二个位置有一个字母,即使字符串中有一个数字,它也会失败。

所以 60B15H 正常通过,但 6D15H 失败,这不是我想要的

我对正则表达式的要求是字符串必须是字母数字,并且在任何位置至少包含一个数字,它可以是所有数字。它只是不能包含所有字母或任何特殊字符。它至少需要 3 个字符。

您可以使用

(?i)\b(?=[a-z]*\d)[a-z\d]{3,}\b
      ^^^^^^^^^^^^

您需要告诉正则表达式引擎检查任何字母后的数字。 (?=[a-z]*\d) 前瞻在每个前导单词边界 \b 之后执行一次,并确保在一系列字母之后至少有一个数字。

regex demo

既然可以用简单的代码得到相同的结果,为什么还要使用正则表达式:

public static bool isValid(string input)
{
    if(input.Length < 3 || input.All(c => char.IsLetter(c))) 
    {
        return false;
    }
    return input.All(c => char.IsLetterOrDigit(c));
}