💭
Chrome のメールフォームに入力した平仮名が Punycode に変換される
正規表現によるバリデーションを設けたメールアドレスの入力フォームがあるとする。英数字、記号だけ入力できるようにして、それ以外だとエラーになるようにしている。
しかしなぜか平仮名を入力してもエラーにならない。と思ったらエラーになるときもある。見たところ正規表現はちゃんとしてる。なんで??
何回か入力してみると、@
の前だとエラーになるが、後だとエラーにならないことが分かってきた。またエラーにならなかったアドレスを取得すると、平仮名そのままではなく、xn--l8j
のようにxn--英数字
に変換されているようだった。
調べてみるとxn--英数字
は Punycode といって、「Unicode で書かれた文字列を DNS で使用可能なアルファベット、数字、ハイフンのみの文字列に変換する」というものらしい。
なんで Punycode に変換されるわけ??と思ったら、こちらに答えがあった。Chrome のメール入力欄(<input type="email">
)だとドメイン部の Unicode 文字列を Punycode として扱うらしい。
だから@
の後に平仮名を入力したときだけエラーにならなかったのか。また他の入力欄では何ともなかったのもtype="text"
だったから、というわけか。
Discussion