“pattern”属性について
“pattern”属性は“input”要素で表される入力欄に入力可能な値の書式を定義します。
“pattern”属性は“type”属性に以下の値が指定されている場合に使用できます。
“pattern”属性の値はJavaScriptの正規表現で記述します。
“pattern”属性で入力可能な入力値の書式を定義すると対応しているブラウザではフォームの送信時に入力値が定義されている書式を満たしているかを検証する妥当性のチェックが行われます。“pattern”属性で定義された書式を満たさない入力値は送信できなくなります。
“type”属性の値が“url”と“email”の場合は“pattern”属性が指定されていない場合でも入力値が妥当な形式であるかがブラウザによってチェックされます。“pattern”属性を指定した場合はブラウザがこれらの入力欄で許容する書式と“pattern”属性で定義した書式の両方を満たす入力値だけが送信できます。
“multiple”属性が指定されていて複数の入力値がある場合はそれぞれの入力値が“pattern”属性で定義されてた書式を満すかが検証されます。
“pattern”属性を指定した場合、“title”属性で書式についての説明を示すことが推奨されます。
正規表現
正規表現とは?
“正規表現(Regular expression)”はさまざまな文字列をその法則性などから一つの表現で記述するための方法です。
例えば以下のような文字列があるとします。
これらの文字列はすべて以下の正規表現で表すことができます。
正規表現は“メタ文字(Metacharacter)”と呼ばれる特別な意味を持った記号(“\”や“[”、“]”など)を組み合わせることで文字列の法則性を表現します。上の例では“a”から“z”のアルファベットを並べた文字列を表現しています。
多くの場合、正規表現はプログラムで同じ法則性を持った文字列を抽出したり、一括で同じ法則性を持った文字列に置換したりするために使用されます。
正規表現はさまざまなプログラム言語で定義されていますが、“pattern”属性の値として記述できる正規表現はJavascriptの仕様書で定義されています。
Javascriptの正規表現には部分一致もありますが、“pattern”属性に指定された正規表現の場合は部分一致は書式を満たしているとは扱われず、入力値全体が正規表現に一致した場合にだけ書式を満たしているとみなされます。
メタ文字
以下は正規表現で使用できる主なメタ文字です。
メタ文字 | 説明 | 正規表現の例 | |
---|---|---|---|
正規表現 | 一致する文字列の例 | ||
[ABC] | A,B,Cのいずれか1文字 | [mike] | “m”、 |
[^ABC] | A,B,Cのいずれでもない1文字 | [^mike] | “a”、 |
[A-Z] | AからZの中からいずれか1文字 | [A-Z] | “A”、 |
^x | 先頭がx | ^m | “mikeneko”、 |
x$ | 末尾がx | o$ | “mikeneko”、 |
x* | 0個以上のx | mike*neko | “mikneko”、 |
x+ | 1個以上のx | mike+neko | “mikeneko”、 |
x? | 0個か1個のx | mike?neko | “mikneko”、 |
(x) | xを1つのグループにまとめる | (mike)+neko | “mikeneko”、 |
x|y | xまたはy | (mike|shiro)neko | “mikeneko”、 |
x{n} | xがn個 | mike{4}neko | “mikeeeeneko” |
x{n,} | xがn個以上 | mike{2,}neko | “mikeeneko”、 |
x{n,m} | xがn個以上、m個以下 | mike{2,4}neko | “mikeeneko”、 |
. | 改行以外の任意の1文字 | . | “A”、 |
\w | 英数字とアンダースコア(“[A-Za-z0-9_]”) | \W | “A”、 |
\W | 英数字とアンダースコア以外(“[^\w]”、“[^A-Za-z0-9_]”) | \W | “あ”、 |
\d | 数字(“[0-9]”) | \d | “0”、 |
\D | 数字以外(“[^\d]”、“[^0-9]”) | \D | “A”、 |
\s | 空白文字 | \s | “ ”、 |
\S | 空白文字以外(“[^\s]”) | \S | “A”、 |
“pattern”属性に指定する正規表現の例
正規表現ではあらゆる書式が定義可能ですが、以下では入力値の書式としてよく使用されるものを取り上げています。
ひらがなのみ
カタカナのみ
以下の例では全角カタカナのみを入力可能にします。
以下の例では半角カタカナのみを入力可能にします。
英数字のみ
以下の例では半角の英数字のみを入力可能にします。
以下の例では半角の英字のみを入力可能にします。
以下の例では半角で大文字の英字のみを入力可能にします。
以下の例では半角で小文字の英字のみを入力可能にします。
入力文字数を制限
以下の例では文字数が8文字以上の入力値のみ許可します。
以下の例では文字数が1文字から8文字の入力値のみ許可します。
以下の例では文字数が8文字の入力値のみ許可します。
以下の例では文字数が10桁から11桁の数字のみ許可します。
郵便番号
以下の例では任意でハイフン(“-”)を含めた形式の郵便番号のみ入力値として許可します。
以下の例ではハイフン(“-”)が任意です。
電話番号
“type”属性の値が“tel”の場合でも電話番号はさまざまな形式であるため通常はブラウザによる妥当性のチェックは行われません。
入力できる入力値を日本で一般的な形式の電話番号のみにしたい場合は“pattern”属性で制約することができます。
以下の例ではハイフン(“-”)を含めた形式の電話番号のみ入力値として許可します。
以下の例では任意でハイフン(“-”)が任意です。