我需要一个满足此声明的正则表达式:
至少有一个字符和一个数字,不分顺序,最后没有后缀(即域名)。
所以我有这个测试清单:
ra182
jas182
ra1z4
我有这个正则表达式:
[a-z]+[0-9]+$
它完全匹配前两个,但它只匹配z4
最后一个。尽管对我来说为什么它只匹配最后一个条目的那部分是有道理的,但我需要一些帮助才能在剩下的过程中得到这个。
我需要一个满足此声明的正则表达式:
至少有一个字符和一个数字,不分顺序,最后没有后缀(即域名)。
所以我有这个测试清单:
ra182
jas182
ra1z4
我有这个正则表达式:
[a-z]+[0-9]+$
它完全匹配前两个,但它只匹配z4
最后一个。尽管对我来说为什么它只匹配最后一个条目的那部分是有道理的,但我需要一些帮助才能在剩下的过程中得到这个。
您可以使用前瞻检查前两个条件:
/^(?=.*[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
.
我建议使用
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) ...
您需要匹配至少有一个字母和一个数字的字母数字字符串?尝试这样的事情:
\w*[a-z]\w*[0-9]\w*
这将确保您至少有一个字母和一个数字,字母后面是数字。如果要考虑字母前的数字,只需使用相应的表达式g(字母前的数字)和|
两者。