文字列が大文字と小文字、数字、アンダースコアだけを含むかどうかをチェックする正規表現が欲しいです。
これらの文字(または空の文字列)をのみ含む文字列に一致させるには、試してください。
"^[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に感謝します)。 したがって、これらの文字をのみ一致させるつもりなら、明示的な(長い)フォームを使用するのがおそらく最善です。
各文字が要件に一致することを確認したいため、以下を使用します。
[A-Za-z0-9_]
そして、あなたは省略バージョンを使用することもできます:
\w
これは同等です(一部の正規表現フレーバーでは、使用する前に確認してください)。 次に、文字列全体が一致する必要があることを示すために、以下を使用します。
^
文字列を示すには、その文字で開始し、次に使用する必要があります。
$
文字列を示すには、その文字で終了する必要があります。 次に使用します。
\w+ or \w*
「1以上」または「0以上」を示すため。 それをすべてまとめると、次のようになります。
^\w*$
\ 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以外の文字は除外されます。 (&などの文字;#339。; キャプチャしたい場合があります。
Computer Scienceでは、英数字の値は、多くの場合、最初の文字が数値ではなく、アルファベットまたはアンダースコアであることを意味します。 その後、文字は「0-9」、「A-Z」、「a-z」、またはアンダースコア(「_」)になります。
これがあなたのやり方です:
php:でテストされています。
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
またはこれを取る。
^[A-Za-z_][A-Za-z\d_]*$
それをあなたの開発言語に置いてください。
文字列用に作成したこれらの多言語拡張子を試してください。
IsAlphaNumeric-文字列には、少なくとも1つのアルファ(charSetで指定されたUnicode範囲の文字)と少なくとも1つの数値(numSetで指定)が含まれている必要があります。 また、文字列はアルファと数値のみで構成する必要があります。
IsAlpha-文字列には、少なくとも1つのアルファ(charSetで指定された言語)が含まれ、アルファのみで構成されている必要があります。
IsNumeric-文字列には少なくとも1つの数値(numSetで指定された言語)を含める必要があり、数値のみで構成されます。
目的の言語の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();
以下の正規表現は、英数字とアンダースコアにマッチします。
^[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";
}
unicode英数字のマッチングを探している人のために、次のようなことをしたいと思うかもしれません。
^[\p{L} \p{Nd}_]+$
さらに読む。 http://unicode.org/reports/tr18/。 と。 http://www.regular-expressions.info/unicode.html。