1

我需要一个满足此声明的正则表达式:

至少有一个字符和一个数字,不分顺序,最后没有后缀(即域名)。

所以我有这个测试清单:

ra182
jas182
ra1z4

我有这个正则表达式:

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

它完全匹配前两个,但它只匹配z4最后一个。尽管对我来说为什么它只匹配最后一个条目的那部分是有道理的,但我需要一些帮助才能在剩下的过程中得到这个。

4

3 回答 3

4

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

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

...如果第三个几乎没有.,那么检查也很简单:

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

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

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

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

于 2012-11-03T22:50:40.307 回答
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) ...
于 2012-11-03T23:07:34.127 回答
-1

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

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

这将确保您至少有一个字母和一个数字,字母后面是数字。如果要考虑字母前的数字,只需使用相应的表达式g(字母前的数字)和|两者。

于 2012-11-03T23:02:57.320 回答