1

このステートメントを満たす正規表現が必要です。

順序に関係なく、少なくとも 1 つの文字と 1 つの数字があり、末尾にサフィックス (つまりドメイン名) はありません。

だから私はこのテストリストを持っています:

ra182
jas182
ra1z4

そして、私はこの正規表現を持っています:

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

z4最初の 2 つには完全に一致していますが、最後の 1 つにしか一致していません。最後のエントリのその部分だけに一致する理由は理解できますが、これを最後まで理解するには少し助けが必要です。

4

3 に答える 3

4

最初の 2 つの条件は先読みで確認できます。

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

...そして、3番目が の不在についてだけである場合、.チェックするのも簡単です:

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

しかし、代わりに 3 つの個別のテストを使用することをお勧めします。最初に記号をチェックし (Unicode プロパティではなく範囲 [az] をチェックするだけで十分Letterですか?)、2 番目に数字をチェックし、この厄介なドットの最後のものは、次のようになります。

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

質問の正規表現は、1 つ以上の記号の後に 1 つ以上の数字が続くものと一致しようとします。のような文字列では明らかに失敗します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

少なくとも 1 つの文字と 1 つの数字を含む英数字の文字列を照合する必要がありますか? 次のようなことを試してください:

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

これにより、少なくとも 1 つの文字と 1 つの数字があり、文字の後に数字があることが確認されます。文字の前に数字を考慮したい場合は、対応する式 g (文字の前に数字) と|2 つを使用してください。

于 2012-11-03T23:02:57.320 に答える