我需要满足这一说法正则表达式:匹配至少一个字符和一个数字,不管顺序如何,没有后缀?
至少有一个字符和一个数字,不论顺序,并在年底有没有后缀(即域名)。
所以我有这样的测试列表:
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] - 而不是Unicode Letter
属性?),第二个用于数字,和这个讨厌的点的最后一个,像这样:
if (Regex.IsMatch(string, "[a-zA-Z]")
&& Regex.IsMatch(string, "[0-9]")
&& ! Regex.IsMatch(string, @"\."))
{
// string IS valid, proceed
}
问题中的正则表达式会尝试匹配一个或多个符号,后跟一个或多个数字;它显然会失败,像9a
这样的字符串。
您需要匹配至少包含一个字母和一个数字的字母数字字符串吗?尝试这样:
\w*[a-z]\w*[0-9]\w*
这将确保您至少有一个字母和一个数字,字母后面的数字。如果你想在字母前考虑数字,只需使用相应的表达式g(字母前的数字)和|
这两个。
我建议使用
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) ...
第一个可能也会受益于'^',我认为在lookahead中的所有'。*'都是不必要的。 –
会使用第一个,'$'(这是一个字符串的末尾?)工作,以确保他们不能追加任何后缀? –
@BigM不会再匹配任何东西,因为那么这个预测将会从字符串的末尾开始,在那里它们不能再匹配 –