如何获得精确的正则表达式接受数字与字母只
本文关键字:数字 何获得 正则表达式 | 更新日期: 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+)