如何获得精确的正则表达式接受数字与字母只

本文关键字:数字 何获得 正则表达式 | 更新日期: 2023-09-27 18:14:23

嗨,我试图得到精确的正则表达式匹配数字与字母,我试过这个

 Regex.IsMatch("1111", @"^[a-zA-Z0-9]+$")

但输出为真。

这是我想要的输出

12345678 -> False
abcdefgh -> False
ABCDEFGH -> False
1234abcd -> True
1234ABCD -> True

如何获得精确的正则表达式接受数字与字母只

尝试以下正向正向匹配表达式:

^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$

这断言两个分组表达式都为真,并在匹配时返回完整字符串。

示例:https://regex101.com/r/GxPPt9/2

这将匹配任何包含数字和字母的字符串,无论顺序如何:

^[[:alnum:]]*(([0-9][A-Za-z])|([A-Za-z][0-9]))[[:alnum:]]*$

如果你想用[A-Za-z0-9]代替[[:alnum:]],这可能是强制性的,以使其在c#中工作,请参阅此答案下的评论。

试一试:https://regex101.com/r/yj9sWw/2

我建议使用非正则表达式方法来计算字母字符和数字字符的数量:

bool ContainsOnlyDigitsAndLetters(string source)
{
    int letters = myInput.Count(Char.IsLetter);
    int numbers = myInput.Count(Char.IsDigit);
    return letters != 0 && numbers != 0 && letters + numbers == myInput.Length;
}

如果inout混淆,返回true,如果只包含数字或字母,或者字符串中存在既不是数字也不是字母的字符,则返回false。

你也可以这样写:

^(?>[0-9]+|[a-zA-Z]+)[a-zA-Z0-9]+$

演示

这里的原子组(?>...)防止正则表达式引擎回溯,因为量词+是贪婪的,[a-zA-Z0-9]+匹配的下一个字符与替换中匹配的字符不同。分支[0-9]+成功时,[a-zA-Z0-9]+匹配的第一个字符只能是字母,[a-zA-Z]+成功时,[a-zA-Z0-9]+匹配的第一个字符只能是数字

变化

a-zA-Z0-9

'w+'d+
@"^['w+'d+]+$"
编辑:

如果数字总是在字符之前,那么简单:

('d+'w+)