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

本文关键字:数字 最小值 一个 第二个 检查 向前看 位置 数字字符 字符串 正则表达式 | 更新日期: 2023-09-27 18:30:53

我一直在尝试解决这个问题,不得不转向问你好人。

我已经多次发现以下正则表达式模式,从我所读到的内容来看,它应该可以工作,但实际上似乎不起作用

'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后执行一次,并确保字母序列后至少有一个数字。

查看正则表达式演示

当您可以使用简单的代码获得相同的内容时,为什么要使用正则表达式:

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));
}