C# 是否至少匹配一个字符和一个数字,不考虑顺序,不带后缀?

C# 是否至少匹配一个字符和一个数字,不考虑顺序,不带后缀?,c#,regex,asp.net-mvc,C#,Regex,Asp.net Mvc,我需要一个符合以下声明的正则表达式: 不管顺序如何,至少有一个字符和一个数字,并且末尾没有后缀(即域名)。 所以我有这个测试列表: ra182 jas182 ra1z4 我有一个正则表达式: [a-z]+[0-9]+$ 它完全匹配前两个,但只匹配最后一个中的z4。虽然对我来说这很有意义,为什么它只匹配最后一个条目的那一部分,但我需要一点帮助来完成剩下的工作。您可以使用lookaheads检查前两个条件: /^(?=.*[a-z])(?=.*[0-9])/i 。。。如果第三个是关于缺少,那么

我需要一个符合以下声明的正则表达式:

不管顺序如何,至少有一个字符和一个数字,并且末尾没有后缀(即域名)。

所以我有这个测试列表:

ra182
jas182
ra1z4
我有一个正则表达式:

[a-z]+[0-9]+$

它完全匹配前两个,但只匹配最后一个中的
z4
。虽然对我来说这很有意义,为什么它只匹配最后一个条目的那一部分,但我需要一点帮助来完成剩下的工作。

您可以使用lookaheads检查前两个条件:

/^(?=.*[a-z])(?=.*[0-9])/i
。。。如果第三个是关于缺少
,那么检查也很简单:

/^(?=.*[a-z])(?=.*[0-9])[^.]+$/i
但我可能更喜欢使用三个单独的测试:第一个是检查符号(你确定只检查范围-[a-z]-而不检查Unicode
字母
属性就足够了吗?),第二个是检查数字,最后一个是检查这个讨厌的点,如下所示:

if (Regex.IsMatch(string, "[a-zA-Z]") 
    && Regex.IsMatch(string, "[0-9]")
    && ! Regex.IsMatch(string, @"\.") ) 
{ 
    // string IS valid, proceed
}
\w*[a-z]\w*[0-9]\w*

问题中的正则表达式将尝试匹配一个或多个符号,后跟一个或多个数字;对于像
9a

这样的字符串,它显然会失败。您需要匹配至少有一个字母和一个数字的字母数字字符串吗?试着这样做:

if (Regex.IsMatch(string, "[a-zA-Z]") 
    && Regex.IsMatch(string, "[0-9]")
    && ! Regex.IsMatch(string, @"\.") ) 
{ 
    // string IS valid, proceed
}
\w*[a-z]\w*[0-9]\w*
这将确保您至少有一个字母和一个数字,数字在字母之后。如果您想考虑字母前的数字,只需使用相应的表达式(字母前的数字)和
这两个表达式。

我建议使用

Match match = Regex.Match(str, @"^(?=.*[a-zA-Z])(?=.*\d)(?!.*\.).*");



第一个可能也会从
^
中受益,我认为lookaheads中的所有
*
都是不必要的。使用第一个,加上
$
(这是字符串的结尾,对吗?)可以确保它们不会附加任何后缀?@BigM,因为它们不再匹配任何东西,因为前瞻将从字符串的末尾开始,在那里它们不能匹配任何more@m.buettner事实上,检查以下
*
没有任何意义。固定的。)@m、 buettner第一个
*
是必需的。否则,lookaheads将阻止任何匹配,因为lookaheads需要立即出现在当前“位置”之后,并且字符不能同时是数字和字母。
Match match = Regex.Match(str, @"^(?=.*[a-zA-Z])[^.]*\d[^.]*$");
if (match.Success) ...