PHP 11日目
投稿日:2022-01-27
更新日:2022-03-24
【プリント資料】正規表現
例えば、郵便番号は3ケタの数字と4ケタの数字で構成されている。郵便番号をユーザが正しく入力しているか確認するには3ケタ数字と4ケタ数字という構成(一定のパターン)が入力されているかチェックする。正規表現は指定したパターンとマッチするか判定する。
正規表現関数
preg_match(stringパターン, stringチェックする文字列):int
郵便番号のパターンチェック
'/^[0-9]{3}-[0-9]{4}$/'
<body>
<h1>正規表現1</h1>
<p>
<?php
$str = '123-4567';
if (preg_match('/^[0-9]{3}-?[0-9]{4}$/', $str)) {
echo '郵便番号です';
} else {
echo '郵便番号ではありません';
}
?>
</p>
</body>
携帯電話番号のパターンチェック
echo '<h2>問題:携帯電話番号? </h2>';
// 携帯番号のパターンチェック
// OK「携帯番号です」
// NG「携帯番号じゃない」と表示
// ハイフンあり・なしOK
// 「090」「080」「070」始まりのみOK
$mobile = '020-0000-0000';
echo "{$mobile}<br>";
if (preg_match('/^0[7-9]0-?[0-9]{4}-?[0-9]{4}$/', $mobile)) {
echo '携帯番号です<br>';
} else {
echo '携帯番号ちゃいます<br>';
}
$mobile = '08000000000';
echo "{$mobile}<br>";
if (preg_match('/^0[7-9]0-?[0-9]{4}-?[0-9]{4}$/', $mobile)) {
echo '携帯番号です';
} else {
echo '携帯番号ちゃいます';
}
// 携帯のパターン:別の書き方例
// ('/^((070)|(080)|(090))-?[0-9]{4}-?[0-9]{4}$/', $mobile)
パターン修飾子(末尾デリミタの後に記述)
修飾子 | 説明 |
---|---|
i | アルファベットの大文字と小文字の違いを無視する |
s | シングルラインモード「.(ドット)」を改行文字にもマッチさせる |
m | マルチラインモード 行単位でマッチングを行う ^と$を行ごとにマッチさせる |
u | パターン文字列をUTF-8エンコードで扱う(全角文字に対応させる) |
D | $メタ文字を検索対象文字列の終わりにのみマッチさせる 対象文字列の末尾に改行がある場合マッチしない ※D未指定時でかつ最後の文字が改行の場合、改行の直前の文字も$メタ文字の対象になる ※mを指定している場合、この修飾子は無視される |
echo '<h2>全角文字のパターンチェック</h2>';
$name = '久保だ大久保';
var_dump(
// preg_match('/^.{3}$/', $name)
// パターン修飾子「u」で全角文字対応
// preg_match('/^.{3}$/u', $name)
// preg_match('/です$/u', $name)
// 後方一致:$のみ記述
// preg_match('/^です/u', $name)
// 前方一致:^のみ記述
preg_match('/大久保/u', $name)
// 文章内一致:^も$もつけない
);