我需要一个符合此声明的RegEx:
无论顺序如何,至少有一个字符和一个数字,并且最后没有后缀(即域名)。
所以我有这个测试清单:
ra182
jas182
ra1z4
我有这个RegEx:
[a-z]+[0-9]+$
它完全匹配前两个,但它只匹配最后一个z4
。虽然我觉得为什么它只匹配最后一个条目的那一部分是有意义的,但我需要一点帮助才能完成剩下的工作。
答案 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*
这将确保您至少有一个字母和一个数字,以及字母后面的数字。如果你想在字母之前考虑数字,只需使用相应的表达式(字母前的数字)和|
两个。