LoginSignup
6
1

More than 5 years have passed since last update.

【Ruby】unicode制御文字の削除

Last updated at Posted at 2018-02-18

事象

iOS11以上での話。
とあるアプリの開発中、iphone電話帳からコピーした電話番号を、アプリの電話番号入力フォームにペーストして確認画面に遷移しようとすると、なぜかバリデーションエラーが発生する。
特に電話番号におかしな点はないのだが...

調査

色々見てるとどうもlengthチェックで引っかかっていた。
どういうことかというと、
・普通に入力:xx-xxxx-xxxx → ハイフンをとって10文字 
・電話帳コピー:xx-xxxx-xxxx → ハイフンをとって12文字
なんか電話帳コピーの場合だけ2文字多い!?
これはconsole.logやalert表示では、パッと見で違いが分からない!

そこでencodeして1つづつ表示してみると、電話番号先頭に「¥u202d」、末尾に「¥u202c」という文字がくっ付いていた事が判明。

hoge.js
for(var i=0; i<tel.length; i++) {
  alert(escape(tel)); // %u202dXX-XXXX-XXXX%u202c
}

なんだこれ?と思い調べてみると、文字の方向を制御するunicodeらしい。
参考:http://www.tohoho-web.com/html/attr/dir.htm

解決

サーバー側にもlengthバリデーションがあり、jsと同じくそこで引っかかっていたので、該当オブジェクトのインスタンスの制御文字込み電話番号から、制御文字を削除しました。

hoge_contoller.rb
tel_str.gsub!(/\u202D|\u202C/, "\u202D":"", "\u202C":"")
6
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1