💭

Chrome のメールフォームに入力した平仮名が Punycode に変換される

2023/11/12に公開

正規表現によるバリデーションを設けたメールアドレスの入力フォームがあるとする。英数字、記号だけ入力できるようにして、それ以外だとエラーになるようにしている。

しかしなぜか平仮名を入力してもエラーにならない。と思ったらエラーになるときもある。見たところ正規表現はちゃんとしてる。なんで??

何回か入力してみると、@の前だとエラーになるが、後だとエラーにならないことが分かってきた。またエラーにならなかったアドレスを取得すると、平仮名そのままではなく、xn--l8jのようにxn--英数字に変換されているようだった。

調べてみるとxn--英数字は Punycode といって、「Unicode で書かれた文字列を DNS で使用可能なアルファベット、数字、ハイフンのみの文字列に変換する」というものらしい。
なんで Punycode に変換されるわけ??と思ったら、こちらに答えがあった。Chrome のメール入力欄(<input type="email">)だとドメイン部の Unicode 文字列を Punycode として扱うらしい。

だから@の後に平仮名を入力したときだけエラーにならなかったのか。また他の入力欄では何ともなかったのもtype="text"だったから、というわけか。

Discussion