web-dev-qa-db-ja.com

英数字のみを許可するように文字列を検証するにはどうすればよいですか?

正規表現を使用して文字列を検証し、英数字のみを許可するにはどうすればよいですか?

(スペースも許可したくありません)。

106
mrblah

次の式を使用します。

^[a-zA-Z0-9]*$

すなわち:

using System.Text.RegularExpressions;

Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
  ...
}
166
cletus

.NET 4.0では、LINQを使用できます。

if (yourText.All(char.IsLetterOrDigit))
{
    //just letters and digits.
}

yourText.Allは実行を停止し、falseの契約を履行できないため、初めてchar.IsLetterOrDigitfalseを報告したときに、Allを返します。

注!この回答は、英数字(通常はA-Z、a-z、および0-9)を厳密にチェックしません。この答えは、åäöのようなローカル文字を許可します。

2018-01-29更新

上記の構文は、正しいタイプの単一の引数を持つ単一のメソッド(この場合はchar)を使用する場合にのみ機能します。

複数の条件を使用するには、次のように記述する必要があります。

if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
190
jgauffin

正規表現ではなく拡張機能を使用して簡単に行うことができます...

public static bool IsAlphaNum(this string str)
{
    if (string.IsNullOrEmpty(str))
        return false;

    for (int i = 0; i < str.Length; i++)
    {
        if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
            return false;
    }

    return true;
}

コメントごと:) ...

public static bool IsAlphaNum(this string str)
{
    if (string.IsNullOrEmpty(str))
        return false;

    return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}
34
JP Alioto

私は正規表現ベースのソリューションがおそらく私が行く方法だと思うが、私はこれを型にカプセル化するように誘惑されるだろう。

public class AlphaNumericString
{
    public AlphaNumericString(string s)
    {
        Regex r = new Regex("^[a-zA-Z0-9]*$");
        if (r.IsMatch(s))
        {
            value = s;                
        }
        else
        {
            throw new ArgumentException("Only alphanumeric characters may be used");
        }
    }

    private string value;
    static public implicit operator string(AlphaNumericString s)
    {
        return s.value;
    }
}

これで、検証済みの文字列が必要な場合、メソッドシグネチャにAlphaNumericStringを要求させることができます。AlphaNumericStringを取得した場合、それは有効である(nullを除く)ことがわかります。誰かが検証されていない文字列を渡そうとすると、コンパイラエラーが生成されます。

気に入れば、すべての等価演算子を実装し、プレーンol '文字列からAlphaNumericStringへの明示的なキャストを実装できます。

17
kyoryu

A〜Z、a〜z、0〜9を確認する必要がありました。正規表現なし(OPが正規表現を要求している場合でも)。

ここでさまざまな回答とコメントをブレンドし、 https://stackoverflow.com/a/9975693/29206 からの議論、これは文字または数字をテストし、他の言語の文字を避け、分数などの他の数字を避けます文字。

if (!String.IsNullOrEmpty(testString)
    && testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
    // Alphanumeric.
}
8
goodeye

文字列が文字と数字の両方の組み合わせであるかどうかを確認するには、.NET 4.0とLINQを使用して、@ jgauffinの回答を次のように書き換えます。

if(!string.IsNullOrWhiteSpace(yourText) && 
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
   // do something here
}
3

^\w+$a-zA-Z0-9_を許可します

^[a-zA-Z0-9]+$を使用して、アンダースコアを禁止します。

これらの両方が空でない文字列を必要とすることに注意してください。 *の代わりに+を使用すると、空の文字列が許可されます。

3
Peter Boughton