結論
ということを分かっているならこの先は読む必要はない。
内容
alpha
バリデーションはA,B,C,...をバリデートしない
→日本語の日常会話で「アルファベット」というと「A,B,C,...」と英字を指すことが多い。
が、本来の意味は「文字そのもの」で、海外ではこちらの意味で使われる。
アルファベット(英: alphabet)は、ひとつひとつの文字が原則としてひとつの子音または母音という音素をあらわす表音文字の一種であり、
また、それを伝統的な配列で並べたものをいう。
「アルファベット」という語は、ギリシア文字の最初の2文字 α, β の読み方である「アルファ」(ἄλφα)、「ベータ」(βήτα)に由来する。
(以上weblioより)
Laravelの定義済みバリデーション alpha
, alpha_num
, alpha_dash
も、恐らくこのような意味で名づけられている。
もし、「 [a-zA-Z]
であること」をバリデートするバリデーションが必要な場合は、オーバーライドするか、独自のバリデーションを新たに定義しなければならない。
alpha
, alpha_num
, alpha_dash
に共通する、 [\pL\pM\pN]
とは何か
バリデーションの定義をみると、次のように書いてある。
/**
* Validate that an attribute contains only alpha-numeric characters, dashes, and underscores.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function validateAlphaDash($attribute, $value)
{
if (! is_string($value) && ! is_numeric($value)) {
return false;
}
return preg_match('/^[\pL\pM\pN_-]+$/u', $value) > 0;
}
pL, pM, pNとは、PHPマニュアルによるとUnicode 文字プロパティのこと。
つまり、 [\pL\pM\pN]
は、以下の文字を含むということになる。
L アルファベット (Letter) Ll、 Lm、Lo、Lt および Lu を含む
M 記号 (Mark)
N 数字 (Number)
Unicode 文字プロパティに含まれる、実際の値はこのサイトに書かれているものだと思われる。
https://www.fileformat.info/info/unicode/category/index.htm
参考
https://blog.tes.co.jp/entry/2018/06/29/145450
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/character-classes-in-regular-expressions#unicode-category-or-unicode-block-p
未確認
- 正規表現の中で日本語などのマルチバイトを使ってマッチさせるには、パターン修飾子の u を付けて、
パターンと対象文字列を UTF-8 として処理するように明示する必要があるらしい(文字コードが UTF-8 であるのが前提)。
以下参考サイト
PHP の preg_replace には u 修飾子をつけた方がいい
[PHP]preg_matchの正規表現の中で日本語(マルチバイト文字)を使う
-
numericは[0-9]であることをバリデートしていない(未確認)
→ギリシャ数字だけでなく、ローマ数字なども含むらしい。
疑問
[a-zA-Z0-9_-]は、_以降という表現にならないのか?
[-{]
だと、{
まで、という意味になるのに・・・?
ASCIIが基準だから、 [-{]
は「最初から{までの文字」ということになるのだろうか...。