ユーザー名バリデーターIsValidUsername
があり、「baconman」をテストしていますが、失敗しています。誰かがこの正規表現で私を助けてくれませんか?
if(!Regex.IsMatch(str, @"^[a-zA-Z]\\w+|[0-9][0-9_]*[a-zA-Z]+\\w*$")) {
isValid = false;
}
制限を次のようにしたい: (非常に近い)
- 5 ~ 17 文字の長さ
- 少なくとも 1 つの文字を含む
- 場所がない
- 特殊文字なし
ユーザー名バリデーターIsValidUsername
があり、「baconman」をテストしていますが、失敗しています。誰かがこの正規表現で私を助けてくれませんか?
if(!Regex.IsMatch(str, @"^[a-zA-Z]\\w+|[0-9][0-9_]*[a-zA-Z]+\\w*$")) {
isValid = false;
}
制限を次のようにしたい: (非常に近い)
不必要にエスケープしています: 文字列の外側に @ で始まるように正規表現を記述する場合、両方の \ は必要ありません - 1 つだけで問題ありません。
また:
@"\w"
また
"\\w"
編集:私はこれを明確にしませんでした:現在、二重エスケープのために、正規表現で \ と w を探しています。したがって、一致するには [文字]\w が必要です (例: "a\w" または "a\wwwwww" が一致します。
要件は、通常のC#で最も適切に処理されます。それらは正規表現にうまくマッピングされません。と同じように文字列で機能するLINQを使用してコード化するだけですIEnumerable<char>
。
また、文字列のクエリを理解することは、必要な要件を持つ正規表現を理解するよりもはるかに簡単です。
正規表現の一部としてすべてを行うことは可能ですが、きれいではありません:-)
^(\w(?=\w*[a-zA-Z])|[a-zA-Z]|\w(?<=[a-zA-Z]\w*)){5,17}$
常に 1 文字が一致する 3 つのチェックを行います (したがって、最後に長さチェックを実行できます)。