匹配至少一个字符和一个数字,无论顺序如何,没有后缀?

时间:2012-11-03 22:45:49

标签: c# regex asp.net-mvc

我需要一个符合此声明的RegEx:

  

无论顺序如何,至少有一个字符和一个数字,并且最后没有后缀(即域名)。

所以我有这个测试清单:

ra182
jas182
ra1z4

我有这个RegEx:

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

它完全匹配前两个,但它只匹配最后一个z4。虽然我觉得为什么它只匹配最后一个条目的那一部分是有意义的,但我需要一点帮助才能完成剩下的工作。

3 个答案:

答案 0 :(得分:4)

您可以通过前瞻检查前两个条件:

/^(?=.*[a-z])(?=.*[0-9])/i

...如果第三个只是缺少.,那么检查也很简单:

/^(?=.*[a-z])(?=.*[0-9])[^.]+$/i

但我可能更喜欢使用三个单独的测试:首先检查符号(你确定它足以检查范围 - [az] - 而不是Unicode Letter属性? ),数字的第二个,这个讨厌的点的最后一个,像这样:

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

问题中的正则表达式将尝试匹配一个或多个符号,后跟一个或多个数字;很明显,9a等字符串会失败。

答案 1 :(得分:0)

我建议使用

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

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

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

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

if (match.Success) ...

答案 2 :(得分:-1)

您需要匹配至少包含一个字母和一个数字的字母数字字符串吗?尝试这样的事情:

\w*[a-z]\w*[0-9]\w*

这将确保您至少有一个字母和一个数字,以及字母后面的数字。如果你想在字母之前考虑数字,只需使用相应的表达式(字母前的数字)和|两个。