17

特定の文字列に az または az のアルファベット文字のみが含まれていることを確認する正規表現を作成しようとしています。文字列の長さは最大 25 文字です。(正規表現が文字列の長さをチェックできるかどうかはわかりません)

例:
1. "abcdef" = true;
2. "a2bdef" = false ;
3. "333" = false;
4. "j" = true;
5. "aaaaaaaaaaaaaaaaaaaaaaaaaa" = false; //26 文字

これが私がこれまでに持っているものです...何が問題なのかわかりません

Regex alphaPattern = new Regex("[^a-z]|[^A-Z]");

これは、文字列にazの大文字または小文字のみを含めることができることを意味すると思いますが、すべての文字を含む文字列に一致させると、falseが返されます...

また、正規表現と他の検証方法の使用効率に関する提案も大歓迎です。

4

6 に答える 6

38
Regex lettersOnly = new Regex("^[a-zA-Z]{1,25}$");
  • ^「文字列の先頭から一致を開始する」ことを意味します
  • [a-zA-Z]「小文字と大文字 az を一致させる」という意味です。
  • {1,25}「前の項目 (文字クラス、上記参照) に 1 ~ 25 回一致する」ことを意味します
  • $「カーソルが文字列の最後にある場合にのみ一致する」ことを意味します
于 2009-06-13T09:15:10.250 に答える
7
/// <summary>
/// Checks if string contains only letters a-z and A-Z and should not be more than 25 characters in length
/// </summary>
/// <param name="value">String to be matched</param>
/// <returns>True if matches, false otherwise</returns>
public static bool IsValidString(string value)
{
    string pattern = @"^[a-zA-Z]{1,25}$";
    return Regex.IsMatch(value, pattern);
}
于 2009-06-15T08:14:55.100 に答える
6

文字列の長さは最大 25 文字です。(正規表現が文字列の長さをチェックできるかどうかはわかりません)

他の人が投稿した回答からわかるように、正規表現は確かに文字列の長さをチェックできます。

ただし、ユーザー入力 (ユーザー名など) を検証する場合は、そのチェックを個別に行うことをお勧めします。

問題は、正規表現は文字列が一致したかどうかしか分からないことです。一致しなかった理由はわかりません。テキストが長すぎたのか、それとも許可されていない文字が含まれていたのか - あなたにはわかりません。プログラムが「指定されたユーザー名に無効な文字が含まれているか、長すぎます」と言うと、友好的とは言えません。代わりに、さまざまな状況に対して個別のエラー メッセージを提供する必要があります。

于 2009-06-13T09:42:12.463 に答える
4

[^a-z]使用している正規表現は、との代替です[^A-Z]。また、式[^…]は、文字セットに記述されている文字以外の任意の文字に一致することを意味します。

a-zしたがって、全体として、式は、以外または以外のいずれかの単一文字に一致することを意味しますA-Z

a-zA-Zしかし、以下にのみ一致する正規表現が必要です。

[a-zA-Z]

そして、その長さを指定するには、式を文字列の開始 ( ^) と終了 ( ) で固定し、量指定子で長さを記述します。これは、少なくとも繰り返しを意味します。${n,m}nm

^[a-zA-Z]{0,25}$
于 2009-06-13T09:28:24.057 に答える
1

大文字または小文字しか使用できないことを正しく理解していますか?

new Regex("^([a-z]{1,25}|[A-Z]{1,25})$")

この場合、正規表現を使用するのが正しいようです。

ちなみに、文字クラス内の最初のキャレット (「^」) は「not」[^a-z]|[^A-Z]を意味するため、「」は「小文字でも大文字でもない」という意味になります (az がすべての文字ではないことは無視してください)。 )。

于 2009-06-13T09:17:14.553 に答える