お問い合わせなどの入力フォームで名前に記号などの文字が入っているかチェックしたい
記号が入っている名前はいたずらの可能性がある
正規表現で記号かどうかチェック
[^!"#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_
{|}~]+`
でもこういうのもチェックしたい
①②③㌢〒♡♢
記号や機種依存文字を全部書いてもいいが、大変なので、いっそのこと許可する文字以外だったらNGにする
ひらがな、英数字、漢字、句読点、空白
^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9ー、。\n\r]+$/u
でもそうすると名前で使われている機種依存文字もNGになってしまう。
こういうやつ
謹祐神﨑謁逸敏﨏㘴隆晴𠮷海朗都羽㤗㟢﨑々猪猪隆繁飼祥塚悅悊惞惕愠
今回はmysqlに登録してある正規表現に一致したらNGみたいな処理を使おうとしたが、限界なので、php側でチェックすることにした。
こんなやり方がある!
PHPで機種依存文字をチェック(https://mgng.mugbum.info/60)
mb_convert_encoding を使って UTF-8 → SJIS (SJIS-winじゃないよ) 変換すると、機種依存文字が「?」になるので、あとは元文字列とバイト数比較すればいいだけ。一応以下スクリプト実行して「OK!」表示されることを確認。
function check($s){
return strlen($s) !== strlen(mb_convert_encoding(mb_convert_encoding($s,'SJIS','UTF-8'),'UTF-8','SJIS'));
}
なるほどおおおお