文字列に大文字、小文字、数字、アンダースコアのみが含まれているかどうかをチェックする正規表現が欲しいのですが。
文字列に大文字、小文字、数字、アンダースコアのみが含まれているかどうかをチェックする正規表現が欲しいのですが。
回答:
それらの文字のみを含む文字列(または空の文字列)に一致させるには、
"^[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
空の文字列を許可したくない場合は、*の代わりに+を使用します。
他の人が指摘したように、一部の正規表現言語にはの省略形があり[a-zA-Z0-9_]
ます。.NET regex言語では、ECMAScriptの動作をオンにし\w
て、省略形(yielding ^\w*$
または^\w+$
)として使用できます。他の言語では、デフォルトでは.NETで\w
やや広範であり、他の種類のUnicode文字にも一致することに注意してください(指摘してくれたJanに感謝します)。したがって、これらの文字のみを一致させるつもりなら、明示的な(長い)形式を使用するのがおそらく最善です。
[\p{upper}\p{lower}\p{gc=Number}_]
結合文字がないと仮定して、これを正しく行うために必要なすべてです。
ここには多くの冗長性があり、私はそれに強く反対しているので、私の決定的な答えは次のようになります:
/^\w+$/
\w
はと同等[A-Za-z0-9_]
です。(ユニコードをミックスに導入しない限り)
+
数量詞を使用して、1つ以上の文字を照合します。空の文字列も受け入れたい場合は、*
代わりに使用してください。
\w
通常、ASCIIだけに制限されていません。
[a-z]
とそのバリエーションではありません。\w
非ラテン文字もキャプチャします。同様šēēā
かкукареку
各文字が要件に一致していることを確認する必要があるため、以下を使用します。
[A-Za-z0-9_]
また、省略形のバージョンを使用することもできます。
\w
これは同等です(一部の正規表現では、使用する前に確認してください)。次に、文字列全体が一致する必要があることを示すには、次を使用します。
^
文字列がその文字で始まる必要があることを示すには、次を使用します
$
文字列がその文字で終わる必要があることを示します。次に使用します
\w+ or \w*
「1以上」または「0以上」を示します。すべてをまとめると、次のようになります。
^\w*$
ええと…質問:少なくとも1人のキャラクターがいる必要があるのか、それともないのか?空の文字列にすることはできますか?
^[A-Za-z0-9_]+$
少なくとも1つの大文字または小文字の英数字またはアンダースコアを実行します。長さがゼロの場合は、*を+に置き換えます。
^[A-Za-z0-9_]*$
編集:
分音記号を含める必要がある場合(cedilla-çなど)、上記と同じように動作するが、分音記号文字を含む単語文字を使用する必要があります。
^\w+$
または
^\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文字の基本的な順序。
文字列用に作成したこれらの多言語拡張機能を試してください。
IsAlphaNumeric-文字列には、少なくとも1つのアルファ(Unicode範囲の文字、charSetで指定)および少なくとも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";
}
これはほとんどの場合に機能します。
/^[\d]*[a-z_][a-z\d_]*$/gi
そして、ほとんどの場合、
abcd True
abcd12 True
ab12cd True
12abcd True
1234 False
^ ... $
-で始まるパターンと終わるパターンを照合する[\d]*
-ゼロ以上の数字に一致[a-z_]
-アルファベットまたはアンダースコアに一致[a-z\d_]*
-アルファベット、数字、またはアンダースコアに一致/gi
-文字列全体でグローバルに一致し、大文字と小文字を区別しません1234
は、著者が要求した言語からの単語です。あなたの言語はより制限的です。
私にとっては、英数字、数字、英数字を区別したいという問題があり、英数字の文字列に少なくとも1つの英数字と少なくとも1つの数字が含まれていることを確認するために、
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
Unicodeの英数字の一致を探している人のために、あなたは次のようなことをしたいかもしれません:
^[\p{L} \p{Nd}_]+$
http://unicode.org/reports/tr18/ および http://www.regular-expressions.info/unicode.htmlでさらに読む
私はあなたがあなたの試合でラテン文字とユニコード文字をとっていないと思います。たとえば、「ã」または「ü」の文字を使用する必要がある場合、「\ w」の使用は機能しません。
または、次の方法を使用することもできます。
^[A-ZÀ-Ýa-zà-ý0-9_]+$
それが役に立てば幸い!
これは私にとってはうまくいき、O'Reillyの「Mastering Regular Expressions」で見つかりました。
/^\w+$/
説明:
自分を確認します。
const regex = /^\w+$/;
const str = `nut_cracker_12`;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}