if ( preg_match( '/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', $value ) ) {
return '4バイト文字が含まれています';
}
UTF-8で日本語は基本3バイトだけれど、旧漢字?とかあまり日常使わない漢字は4バイトのものがあるよう。
wikipediaによるとJIS X 0213という規格の文字とかこちらの文字とか。
4バイト文字は、
1バイト目 = \xf0-\xf7
2バイト目 = \x80-\xbf
3バイト目 = \x80-\xbf
4バイト目 = \x80-\xbf
の文字を指すので上記コードとなる。
参考:https://design215.com/toolbox/utf8-4byte-characters.php
画像ソースを取得
preg_match("/(.*)((http|https):\/\/.*?\.({$validSuffix}))(.*)/i", $elementValue, $aryMatch);
$img = $aryMatch[2]
HTML要素などの文字列の中から画像ソースを取得するときなどに使用した。
$validSuffixには許容する画像の拡張子を以下のようにパイプつなぎで設定する。
$validSuffix = 'png|jpeg|gif';
$elementValueは検索対象の文字列。
$aryMatchに検索結果が代入され、画像ソースは2番目のサブパターンなので$aryMatch[2]で取得できる。
変換指定\Q...\E
$searched_items = preg_grep( '/.*\Q' . $search . '\E.*/', $items );
上記のようなコードを見たときに\Q, \Eってなんだと思ったので調べると
\Q は \E までのメタ文字を無効化するのだそう。
他にも
\u は次の1文字を大文字に変換
\l は次の1文字を小文字に変換
\U は \E までの文字を大文字に変換
\L は \E までの文字を小文字に変換
などあるそう。
覚えられない...
こちらのサイトを参考にしました。
https://www.tohoho-web.com/ex/regexp.html#text_modifirers
URLの形式チェック
if ( ! preg_match( '/^(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $url ) ) {
$url_elements = preg_split('/^https?:\/\//', $url);
if ( ! $url_elements || count( $url_elements ) <= 1 ) {
echo( 'URL は http:// または https:// から入力してください' );
return false;
}
$url_chars = preg_split("//u", $url_elements[1], -1, PREG_SPLIT_NO_EMPTY);
// 上記はphp>=7.4ならmb_str_splitを使用できる
$invalid_chars = preg_grep('/[^-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]/', $url_chars);
if ( count( $invalid_chars ) ) {
echo( 'URLとして不正な文字が含まれています: ' . current( $invalid_chars ) );
return false;
}
if ( ! filter_var( $url, FILTER_VALIDATE_URL ) ) {
echo( 'URLの形式が不正です ' );
return false;
}
}
3行目でHTTP プロトコルのURLかをチェックし、
11行目ではURLとして不正な文字がないか、あればアラートを出す処置をし、
16行目ではPHPの検証フィルタ FILTER_VALIDATE_URL を使用してRFC2394に準拠しているかをチェックしている。

コメント
コメントを投稿