1

ユーザー名には非常に複雑な検証ルールがあり、誰かが私の正規表現を改善するのを手伝ってくれることを望んでいました. ルールは次のとおりです。

ユーザーは 15 桁の ID のみでログインできます

また

次のルールに従うユーザー名でログインします。

  • ギリシャ語と英語 (大文字と小文字) の文字を含めることができます
  • 数字を含めることができます
  • 記号を含めることができます: !@#$*_
  • 長さ: 少なくとも 7。最大 14
  • 少なくとも 5 文字 (前述の英語、ギリシャ語、記号の文字から) と少なくとも 2 つの数字が含まれている必要があります

ここに私が作成した獣があります

^\d{15}$|^(?=[a-zA-z0-9\p{IsGreekandCoptic}!@#$*_]{7,14}$)(?=.*[0-9].*[0-9])(?=.*[a-zA-z\p{IsGreekandCoptic}!@#$*_].*[a-zA-z\p{IsGreekandCoptic}!@#$*_].*[a-zA-z\p{IsGreekandCoptic}!@#$*_].*[a-zA-z\p{IsGreekandCoptic}!@#$*_].*[a-zA-z\p{IsGreekandCoptic}!@#$*_]).*

これが機能している間、私はそれをより良くしたいと思っていました。私はC#で書いています

4

2 に答える 2

3

このモンスターを一連のチェックに分割します。最初の 3 つの項目は比較的単純な正規表現でチェックできますが、最後の 2 つの項目は命令的に行う方が適切です。

if(username.Length < 7 || username.Length > 14) return false;
if(username.CountDigits() < 2) return false;
于 2012-09-05T10:11:53.620 に答える
0

これは、速度を最適化していない場合、正規表現のみを使用したより保守しやすいバージョンです。

bool valid = Regex.IsMatch(s, @"^\d{15}$|^(?=[a-zA-z0-9\p{IsGreekandCoptic}!@#$*_]{7,14}$)") &&
             Regex.Matches(s, @"\d").Count >= 2 &&
             Regex.Matches(s, @"[a-zA-z\p{IsGreekandCoptic}!@#$*_]").Count >= 5;
于 2012-09-05T11:26:48.307 に答える