preg_mach関数|郵便番号の正規表現

パソコン

preg_mach関数の書き方がわからない
記号だらけでチンプンカンプン

郵便番号の正規表現が理解できない。

というか、正規表現自体、仕組みを理解していない。

スポンサーリンク

preg_mach関数と正規表現

<?php
if (preg_match('/^[0-9]{7}$/', $postcode)){
    echo '郵便番号', $postcode, 'を確認しました。';
}
else{
    echo $postcode, 'は適切な番号ではありません。';
}
?>

preg_mach ( ’/  文字列条件 /’ ,  調べる文字列 ) で書く。

この条件の書き方が複雑。。。。

‘/ ABC/’と条件を入れれば、ABCの入力にのみ対応する。

‘/ /’この間に、正規表現で条件を書く。

書かれている正規表現は
^[0-9]{7}$

^は、先頭からの意味。
[0-9]は、0から9のいずれかの一文字。
{7}は、直前の文字が7文字続くの意味。
$は、末尾からの意味。

直前の文字とは一体・・・

{7}の直前の文字は[0-9]、『0から9のいずれかの一文字』=数字
直前の文字は数字
この場合は数字が7文字続く意味。

^[0-9]{7}$ この部分の意味は
先頭と末尾両方から数えて、数字7文字連続する。
つまり、数字7文字でできている文字列。

仮に ^[0-9]{7} と記入すると
先頭から7文字数字が続く。
12345678900ABCと入力しても、先頭から数字7文字続いているので合致する事になる。

ハイフンを含める場合

^[0-9]{3}-[0-9]{4}$
次の3つに分解される

^[0-9]{3} 先頭から数字三文字
- ハイフン
[0-9]{4}$ 後ろから数字4文字

000-0000

郵便番号の配列ルールになる。

パスワードの正規表現

郵便番号の次にパスワードの正規表現を見ていく。
英大文字、小文字、数字を含む8桁のパスワード。
一層意味が解らない。

<?php
$password=$_REQUEST['password'];
if(preg_match('/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,}/',$password)){
    echo 'パスワード「', $password, '」が入力されました。';
}else{
    echo 'パスワード「', $password, '」は条件を満たしていません。';
}
?>

(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,}この部分が正規表現になる

長々と書いてあり戸惑う

(?=.*[a-z])この部分を理解する
(?= )は先読みアサーション
条件にマッチするかを調べる(?=条件)
この場合の条件は .*[a-z]

一つずつ見ていく
.は何か1文字
*は直前に文字が無いか連続する
[a-z]半角英小文字の中から一文字1文字

つまり .*[a-z] の条件は
一文字目に英小文字が来る事。
何らかの文字があり、英小文字がどこかで現れる事。
つまり、英小文字が含まれるかどうか。

分解して考える
(?=.*[a-z]) 英小文字があるかを確認
(?=.*[A-Z]) 英大文字があるかを確認
(?=.*[0-9]) 数字があるかを確認
[a-zA-Z0-9] 英小文字、英大文字、数字の中から1文字
{8,} 直前の文字が8連続する。

アルファベット大文字、小文字、数字で書かれた8文字に対して、
英小文字、英大文字、数字が使われているかを確認する。

今っぽい条件のパスワードにする

以下の条件を追加して、
英大文字、、小文字、数字、記号を含む8文字以上32文字以内の文字列を判別する正規表現

記号を含めるために
(?=.*[任意の記号])を追加。
{8,32}で文字数の条件を規定する

コメント

タイトルとURLをコピーしました