フォームのID・ユーザー名・パスワードなどで、入力が半角英数字だけで構成されているかを確認したい場面はよくあります。これは正規表現一行で判定できます。
ポイントは、全角の英数字(012・ABC)は半角英数字に含まれないこと、そして空文字の扱いです。この記事では、つまずきやすい点を押さえながら解説します。
/^[a-zA-Z0-9]+$/.test(str) でできます。* ではなく + を使うと空文字を弾けます。全角の英数字(0AB)は [a-zA-Z0-9] に一致しないため、自動的に false になります。半角英数字とは(全角との違い)
半角英数字とは、半角のアルファベット(a〜z・A〜Z)と数字(0〜9)のことです。いずれもASCIIに含まれる文字で、正規表現の [a-zA-Z0-9] で表せます。
Hello123/abc/2024… 半角英数字こんにちは/Hello 123(スペース込み) … 半角英数字ではない012/ABC(全角) … 見た目は似ていても別物で対象外
正規表現でチェックする
文字列全体が半角英数字かどうかは、先頭 ^ から末尾 $ までを[a-zA-Z0-9] で囲って判定します。
function isAlphanumeric(str) {
return /^[a-zA-Z0-9]+$/.test(str);
}
isAlphanumeric("Hello123"); // true
isAlphanumeric("12345"); // true(数字のみ)
isAlphanumeric("abcDEF"); // true(英字のみ)
isAlphanumeric("Hello 123");// false(スペースを含む)
isAlphanumeric("こんにちは"); // false(日本語を含む)
/^[a-zA-Z0-9]*$/ のように *(0文字以上)を使うと、空文字 "" も true になってしまいます。「1文字以上の入力が半角英数字か」を見たいなら、+(1文字以上)を使ってください。全角の英数字は弾かれる(半角限定の確認)
このテーマで最も重要なのが、全角の英数字は半角英数字として扱われない点です。[a-zA-Z0-9] はASCIIの半角のみを対象とするため、全角の 012 や ABC は false になります。
isAlphanumeric("012"); // false(全角数字)
isAlphanumeric("ABC"); // false(全角アルファベット)
isAlphanumeric("Abc12"); // false(全角数字が混在)
ユーザーが全角で入力・貼り付けするケースに備えるなら、判定前に全角を半角へ変換してからチェックする方法もあります。変換の仕方は全角を半角に変換する方法にまとめています。
記号やアンダースコアも許可したいとき
ユーザー名などで _(アンダースコア)や -(ハイフン)も許可したい場合は、文字クラスに加えます。ハイフンは文字クラスの末尾に置くと範囲指定と誤解されず安全です。
function isUsername(str) {
return /^[a-zA-Z0-9_-]+$/.test(str);
}
isUsername("user_name"); // true
isUsername("user-01"); // true
isUsername("user name"); // false(スペースは不可)
用途別:パスワードの文字種要件(先読み)
「英大文字・数字を含み8文字以上」のような複数条件を一度に検証したいときは、先読み(lookahead)を使います。(?=...) は「その条件を満たす箇所が存在するか」だけを確認し、文字を消費しません。
// 英大文字を含む・数字を含む・8文字以上
const rule = /^(?=.*[A-Z])(?=.*[0-9]).{8,}$/;
rule.test("Password1"); // true
rule.test("password1"); // false(大文字なし)
rule.test("PASSWORD"); // false(数字なし)
rule.test("Pw1"); // false(8文字未満)
なお .{8,} の . は任意の文字にマッチするため、半角英数字だけに限定したい場合は [A-Za-z0-9]{8,} のように文字クラスで縛ります。
関連:半角全般・全角のチェック
英数字に限らず判定したい場合は、用途に応じて次の記事も参考にしてください。
- 半角全般(記号・半角カナ含む)か → 文字列が半角かどうかをチェックする方法
- 全角が含まれるかを逆に判定 → 全角文字をチェックする方法
よくある質問(FAQ)
/^[a-zA-Z]+$/.test(str) でチェックできます。大文字のみは [A-Z]、小文字のみは [a-z] に限定します。[a-zA-Z0-9] はASCIIの半角のみを対象とするため、全角の 012 や ABC は false になります。全角入力も受け付けたい場合は、判定前に半角へ変換してからチェックします。* ではなく + にします。/^[a-zA-Z0-9]+$/ なら、空文字 "" は false になります。/^(?=.*[A-Z])(?=.*[0-9]).{8,}$/ で「大文字含む・数字含む・8文字以上」を一度に確認できます。まとめ
半角英数字かどうかの判定は /^[a-zA-Z0-9]+$/.test(str) が基本です。* だと空文字も通ってしまうので、1文字以上を要求するなら + を使いましょう。
大切なのは、全角の 012・ABC は半角英数字として扱われず false になる点です。全角入力も受け付けたいなら、判定前に半角へ変換します。パスワードのような複数条件は先読み (?=...) でまとめて検証できます。

