0

ユーザー名バリデーターIsValidUsernameがあり、「baconman」をテストしていますが、失敗しています。誰かがこの正規表現で私を助けてくれませんか?

if(!Regex.IsMatch(str, @"^[a-zA-Z]\\w+|[0-9][0-9_]*[a-zA-Z]+\\w*$")) {
    isValid = false;
}

制限を次のようにしたい: (非常に近い)

  1. 5 ~ 17 文字の長さ
  2. 少なくとも 1 つの文字を含む
  3. 場所がない
  4. 特殊文字なし
4

3 に答える 3

2

不必要にエスケープしています: 文字列の外側に @ で始まるように正規表現を記述する場合、両方の \ は必要ありません - 1 つだけで問題ありません。

また:

@"\w"

また

"\\w"

編集:私はこれを明確にしませんでした:現在、二重エスケープのために、正規表現で \ と w を探しています。したがって、一致するには [文字]\w が必要です (例: "a\w" または "a\wwwwww" が一致します。

于 2013-02-20T20:02:38.003 に答える
1

要件は、通常のC#で最も適切に処理されます。それらは正規表現にうまくマッピングされません。と同じように文字列で機能するLINQを使用してコード化するだけですIEnumerable<char>

また、文字列のクエリを理解することは、必要な要件を持つ正規表現を理解するよりもはるかに簡単です。

于 2013-02-20T20:10:04.180 に答える
0

正規表現の一部としてすべてを行うことは可能ですが、きれいではありません:-)

^(\w(?=\w*[a-zA-Z])|[a-zA-Z]|\w(?<=[a-zA-Z]\w*)){5,17}$

常に 1 文字が一致する 3 つのチェックを行います (したがって、最後に長さチェックを実行できます)。

  1. 文字は、[a-zA-Z] の前にある任意の単語文字 \w です。
  2. または [a-zA-Z]
  3. または、[a-zA-Z] の後にある任意の単語文字 \w です。
于 2013-02-21T08:53:39.707 に答える