web-dev-qa-db-ja.com

英数字とアンダースコアの正規表現

文字列に大文字、小文字、数字、およびアンダースコアのみが含まれているかどうかをチェックする正規表現を使用したいです。

504
Jim

only これらの文字を含む文字列(または空の文字列)を照合するには、

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

これは.NETの正規表現、そしておそらく他の多くの言語でも機能します。

それを分解する:

^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string

空の文字列を許可したくない場合は、*の代わりに+を使用してください。

_ edit _ 他の人が指摘したように、いくつかの正規表現言語は[a-zA-Z0-9_]の省略形を持っています。 .NET正規表現言語では、ECMAScriptの動作を有効にして、\wを短縮形として使用できます(^\w*$または^\w+$を生成)。他の言語では、そして.NETのデフォルトでは、\wはいくぶん広く、そして他の種類のユニコード文字と一致するでしょう(これを指摘してくれたJanに感謝します)。そのため、 only の文字と実際に一致させる場合は、明示的な(より長い)形式を使用するのがおそらく最善です。

825
Charlie

ここにはたくさんの冗長性があり、私はそれに深く反対しているので、私の最終的な答えは次のようになるでしょう。

/^\w+$/

\w[A-Za-z0-9_]と同等です。これはほとんどあなたが望むものです。 (ミックスにUnicodeを導入しない限り)

+数量詞を使用すると、1つ以上の文字と一致します。空の文字列も受け入れたい場合は、代わりに*を使用してください。

295
kch

あなたはそれぞれのキャラクターがあなたの要求に合っているかチェックしたい、それが私たちが使う理由です:

[A-Za-z0-9_]

そして、あなたは簡略版を使うことさえできます:

\w

これは同等です(正規表現の種類によっては、使用する前に必ず確認してください)。次に、文字列全体が一致する必要があることを示すために、次のようにします。

^

文字列がその文字で始まっていなければならないことを示すには、つぎのようにします。

$

文字列を示すにはその文字で終わらなければなりません。それから使う

\w+ or \w*

"1以上"、または "0以上"を示します。まとめると、次のようになります。

^\w*$
35
Anton

\wよりも冗長ですが、私は個人的に完全なPOSIX文字クラス名( http://www.zytrax.com/tech/web/regex.htm#special )の読みやすさを高く評価しています。 :

^[[:alnum:]_]+$

しかし、上記のリンク先の文書では\wは "0 - 9、A - Z、a - zの範囲内の任意の文字と一致する(POSIX [:alnum:]と同等)"と述べていますが、本当です。とにかくgrep -Pと一緒ではありません。 [:alnum:]を使用する場合はアンダースコアを明示的に含める必要がありますが、\wを使用する場合は必要ありません。あなたは短くて甘いのために以下を打つことはできません:

^\w+$

読みやすさに加えて、POSIX文字クラス( http://www.regular-expressions.info/posixbrackets.html )を使用すると、正規表現はASCII以外の文字列でも機能することになります。他の文字セットとは異なる可能性があるASCII文字の基本的な順序に依存しているため、ベースの正規表現は機能しません。したがって、必要なASCII以外の文字( - などの文字)は除外されます。キャプチャします。

25

うーん...質問:それは少なくとも1文字を持っている必要がありますか?空の文字列になりますか?

^[A-Za-z0-9_]+$

少なくとも1つの大文字または小文字の英数字または下線を使用します。長さがゼロになる可能性がある場合は、*を+に置き換えてください。

^[A-Za-z0-9_]*$

編集する

発音区別符号を含める必要がある場合(cedilla - cなど)、上記と同じことを行い、発音区別符号を含むWord文字を使用する必要があります。

^\w+$

または

^\w*$
24
BenAlabaster

コンピュータサイエンスでは、英数字の値は多くの場合、最初の文字が数字ではなくアルファベットまたはアンダースコアであることを意味します。その後、文字は0-9A-Za-z、またはアンダースコア(_)になります。

これを行う方法は次のとおりです。

Phpでテスト済み:

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

またはこれを取る

^[A-Za-z_][A-Za-z\d_]*$

そしてあなたの開発言語でそれを置きなさい。

17
Danuel O'Neal

どうですか?

^([A-Za-z]|[0-9]|_)+$

...明示的になりたい場合、または

^\w+$

...簡潔にしたいのであれば(Perl構文)。

12
Drew Hall

lookaheadsを使って "少なくとも1つ"のことをする。私を信じてそれははるかに簡単です。

これは、少なくとも1桁の数字と1文字の文字を含む、1から10文字の文字を必要とする例です。

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

注:\ wを使用することもできましたが、ECMA/Unicodeの考慮事項が有効になり、\ w "Word文字"の文字カバレッジが増加します。

11
boooloooo

私が文字列に対して行ったこれらの多言語拡張を試してください。

IsAlphaNumeric - Stringは、少なくとも1つのアルファ(Unicode範囲の文字、charSetで指定)および少なくとも1つの数字(numSetで指定)を含む必要があります。また、文字列は英数字のみで構成する必要があります。

IsAlpha - Stringは(指定された言語のcharSetで)少なくとも1つのアルファを含み、アルファのみで構成されなければなりません。

IsNumeric - Stringは(指定された言語のnumSetで)少なくとも1つの数字を含み、数字のみで構成されている必要があります。

目的の言語のcharSet/numSet範囲を指定できます。 Unicodeの範囲は以下のリンクから入手できます。

http://www.ssec.wisc.edu/~tomw/Java/unicode.html

API:

    public static bool IsAlphaNumeric(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";
        const string numSet = @"0-9";

        //Greek
        //const string charSet = @"\u0388-\u03EF";            
        //const string numSet = @"0-9";

        //Bengali
        //const string charSet = @"\u0985-\u09E3";
        //const string numSet = @"\u09E6-\u09EF";

        //Hindi
        //const string charSet = @"\u0905-\u0963";
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
    }

    public static bool IsNumeric(this string stringToTest)
    {
        //English
        const string numSet = @"0-9";

        //Hindi
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
    }

    public static bool IsAlpha(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";

        return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
    }

使用法 :

        //English
        string test = "AASD121asf";

        //Greek
        //string test = "Ϡϛβ123";

        //Bengali
        //string test = "শর৩৮";

        //Hindi
        //string test = @"क़लम३७ख़";

        bool isAlphaNum = test.IsAlphaNumeric();
9
Shantanu

次の正規表現は、英数字とアンダースコアに一致します。

^[a-zA-Z0-9_]+$

例えば、Perlでは:

#!/usr/bin/Perl -w

my $arg1 = $ARGV[0];

# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
  print "Failed.\n";
} else {
    print "Success.\n";
}
8
Jay

私には、英数字の文字列に少なくとも1つの英字と少なくとも1つの数字が含まれるように、英数字と英数字を区別したいという問題がありました。

^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
4
mylesmckeown

ユニコードの英数字マッチングを探している人のために、あなたは以下のようなことをしたいかもしれません:

^[\p{L} \p{Nd}_]+$

http://unicode.org/reports/tr18/ および http://www.regular-expressions.info/unicode.html でさらに読む

2
Agustin

正規表現で発音区別符号を一致させると、特にUnicodeを考慮した場合、ワームの可能性が広がります。特にPosixロケールについて読みたいと思うかもしれません。

1
Jean-Denis Muys

これは、1文字以上255文字以下の数量詞を指定するための正規表現です。

[^ a-zA-Z0-9 _] {1,255}

1
mson

^\w * $は以下の組み合わせで機能します1 123 1av pRo av1

0
Mukund

文字列全体をチェックし、空の文字列を許可しないようにするには、

^[A-Za-z0-9_]+$
0
David Norman

私はあなたがあなたの試合でラテン文字とUnicode文字を取っていないと信じています。たとえば、「ã」または「ü」の文字を取る必要がある場合は、「\ w」を使用しても機能しません。

あるいは、この方法を使用することもできます。

^[A-ZÀ-Ýa-zà-ý0-9_]+$

それが役に立てば幸い!

0
Marcio Martins

これは私にはうまくいきますあなたが試すことができる[\ p {Alnum} _]

0
Saurabh