日本語環境ではハイフンっぽく見える文字が何種類も有ります。
そのせいで、住所入力欄などでハイフン(っぽい文字)でバリデーションにひっかかってイライラするということが多々有ります。
一般のユーザーがハイフンっぽい文字の違いを理解しているはずもないので、ハイフン系文字の内、特定の1つだけを許容するようなバリデーションルールを設定してしまうと、ユーザビリティを低下させてユーザの離脱を招きます。
ハイフンっぽいものは全部入力できるようにして、サーバサイドで統一的な文字に置換するほうが良いでしょう。
というわけで、日本語環境で入力できるハイフンをまとめてみました。
文字 | UTF-8 | Unicode | 説明 |
---|---|---|---|
- | 2D | U+002D | ASCIIのハイフン |
ー | E383BC | U+30FC | 全角の長音 |
‐ | E28090 | U+2010 | 別のハイフン |
‑ | E28091 | U+2011 | 改行しないハイフン |
– | E28093 | U+2013 | ENダッシュ |
— | E28094 | U+2014 | EMダッシュ |
― | E28095 | U+2015 | 全角のダッシュ |
− | E28892 | U+2212 | 全角のマイナス |
ー | EFBDB0 | U+FF70 | 半角カナの長音 |
日本語IMEから入力可能なものはこれくらいでしょうか。
例えば、PHPでこれら全てにマッチする正規表現を書くと以下のようになります。
$regex = '/[\x{30FC}\x{2010}-\x{2015}\x{2212}\x{FF70}-]/u';
実はまだまだたくさんハイフンに似た文字は有ります。
下記記事を参考に状況に応じて実装して下さい。
参考
- ダッシュ (記号) - Wikipedia
- Unicode対応文字コード表
- UTF-8 to Unicode converter
- Unicodeにあるハイフン/マイナス/長音符/波線/チルダのコレクション | hydroculのメモ
謝辞
- hnwさんに他にもたくさんのハイフンっぽい文字があることを教えて頂きました。