您好,我试图获得匹配数字与字母表的精确正则表达式, 我试过这个
Regex.IsMatch("1111", @"^[a-zA-Z0-9]+$")
但输出为真。
这是我想要的输出
12345678 -> False
abcdefgh -> False
ABCDEFGH -> False
1234abcd -> True
1234ABCD -> True
答案 0 :(得分:2)
这将匹配任何包含数字和字母的字符串,无论顺序如何:
^[[:alnum:]]*(([0-9][A-Za-z])|([A-Za-z][0-9]))[[:alnum:]]*$
如果您希望可以将[[:alnum:]]
替换为[A-Za-z0-9]
,则可能必须将其用于C#,请参阅此答案下的评论。
答案 1 :(得分:1)
尝试以下正向前瞻匹配表达式:
^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$
这断言两个分组表达式都为真,并在匹配时返回完整字符串。
答案 2 :(得分:0)
我建议使用非正则表达式来计算字母数字和数字字符数:
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。
答案 3 :(得分:0)
你也可以写:
^(?>[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]+
匹配的第一个字符只能是一个数字。
答案 4 :(得分:-1)
更改
a-zA-Z0-9
到
\w+\d+
@"^[\w+\d+]+$"
编辑:
如果数字总是在字符之前如此简单:
(\d+\w+)