TelephoneNumber 是基於 Google 的 libphonenumber 函式庫的全球電話號碼驗證 gem。
請隨意查看我們的演示!
號碼傑克
將此行新增至應用程式的 Gemfile 中:
gem 'telephone_number'
然後執行:
$ bundle
或自己安裝:
$ gem install telephone_number
該函式庫需要 Ruby 2.4 或更高版本。
validates :my_attribute_name, telephone_number: {country: proc{|record| record.country}, types: [:fixed_line, :mobile, etc]}
:area_code_optional
:fixed_line
:mobile
:no_international_dialling
:pager
:personal_number
:premium_rate
:shared_cost
:toll_free
:uan
:voicemail
:voip
record.country
必須產生有效的兩個字母國家/地區代碼,例如:us
、 :ca
或'DE'
String
或Symbol
而不是Proc
。 您可以透過呼叫以下方式取得TelephoneNumber
物件:
phone_object = TelephoneNumber.parse("3175082237", :us) ==>
#
之後,您可以使用下列實例方法。
valid_types
傳回該數字被認為有效的所有類型。
phone_object.valid_types ==> [:fixed_line, :mobile, :toll_free]
valid?
傳回布林值,指示valid_types
是否為空。
phone_object.valid? ==> true
national_number(formatted: true)
傳回國家格式的數字,包括特殊字符,例如括號和破折號。您可以透過傳遞formatted: false
來省略特殊字符
phone_object.national_number ==> "(317) 508-2237"
international_number(formatted: true)
傳回國際格式的數字,包括特殊字符,例如括號和破折號。您可以透過傳遞formatted: false
來省略特殊字符
phone_object.international_number ==> "+1 317-508-2237"
e164_number(formatted: true)
傳回國際格式的數字,包括特殊字符,例如括號和破折號。您可以透過傳遞formatted: false
來省略特殊字符
phone_object.e164_number ==> "+13175082237"
country
傳回一個對象,其中包含與號碼所在國家/地區相關的資料。
phone_object.country ===>
#
location
返回號碼的位置。預設區域設定是:en
phone_object.location ==> "Indiana"
phone_object.location(:ja) ==> "ソウル特別市"
timezone
返回號碼的時區。
phone_object.timezone ==> "America/New_York"
您也可以使用以下類別方法。
parse
傳回一個 TelephoneNumber 物件。
TelephoneNumber.parse("3175082237", :US)
如果您傳遞 E164 格式的號碼,我們將即時確定所在國家/地區。
TelephoneNumber.parse("+13175082237")
valid?
傳回布林值,指示特定數字是否有效。
TelephoneNumber.valid?("3175082237", :US) ==> true
如果您希望針對一組特定的金鑰進行驗證,您可以傳入一組金鑰
TelephoneNumber.valid?("3175082237", :US, [:mobile, :fixed_line]) ==> true
TelephoneNumber.valid?("3175082237", :US, [:toll_free]) ==> false
invalid?
傳回布林值,指示特定數字是否無效。
TelephoneNumber.invalid?("3175082237", :US) ==> false
如果您希望針對一組特定的鍵進行無效,您可以傳入一組鍵
TelephoneNumber.invalid?("3175082237", :US, [:mobile, :fixed_line]) ==> false
TelephoneNumber.invalid?("3175082237", :US, [:toll_free]) ==> true
如果您需要覆蓋 Google 提供的數據,可以透過設定覆蓋檔案來實現。該檔案預計與 Google 的格式相同,並使用 Marshal 進行序列化。
要產生序列化覆蓋檔案:
ruby bin/console
TelephoneNumber.generate_override_file("/path/to/file")
在本例中, /path/to/file
表示一個 xml 文件,其中包含您的自訂數據,其結構與 Google 資料的結構相同。
您可以使用以下命令設定覆蓋檔案:
TelephoneNumber.override_file = "/path/to_file.dat"
如果向 TelephoneNumber 傳遞了一個無效號碼,然後要求對該號碼進行格式化,則它只會傳回原始傳遞號碼的未格式化字串。這是因為無法找到無效數字的格式規則。如果這是不可接受的,您可以設定default_format_pattern
和default_format_string
,TelephoneNumber 將使用它們嘗試格式化無效號碼。
TelephoneNumber.default_format_pattern = "(\d{3})(\d{3})(\d*)"
TelephoneNumber.default_format_string = "($1) $2-$3"
invalid_number = "1111111111"
phone_object = TelephoneNumber.parse(invalid_number, :US)
phone_object.national_number ==> "(111) 111-1111"
查看儲存庫後,執行bin/setup
以安裝相依性。然後,執行rake test
來執行測試。您也可以執行bin/console
以獲得互動式提示,以便您進行實驗。
在開發新功能時,您可能需要針對特定電話號碼進行測試。為此,請將號碼新增至lib/telephone_number/test_data_generator.rb
中,然後執行rake data:test:import
。該命令將訪問 Google 提供的演示應用程式並提取正確的格式進行測試。
若要將此 gem 安裝到本機上,請執行bundle exec rake install
。
歡迎在 GitHub 上提交錯誤報告和拉取請求:https://github.com/mobi/telephone_number。該計畫旨在成為一個安全、溫馨的協作空間,貢獻者應遵守貢獻者契約行為準則。
該 gem 根據 MIT 授權條款作為開源提供。