TelephoneNumber ist ein globales Juwel zur Telefonnummernvalidierung, das auf der libphonenumber-Bibliothek von Google basiert.
Schauen Sie sich gerne unsere Demo an!
Numberjack
Fügen Sie diese Zeile zur Gemfile Ihrer Anwendung hinzu:
gem 'telephone_number'
Und dann ausführen:
$ bundle
Oder installieren Sie es selbst als:
$ gem install telephone_number
Diese Bibliothek erfordert Ruby 2.4 oder höher.
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
einen gültigen zweibuchstabigen Ländercode wie :us
, :ca
“ oder 'DE'
liefern.Proc
auch einfach einen String
oder Symbol
übergeben. Sie können ein TelephoneNumber
Objekt erhalten, indem Sie Folgendes aufrufen:
phone_object = TelephoneNumber.parse("3175082237", :us) ==>
#
Danach stehen Ihnen die folgenden Instanzmethoden zur Verfügung.
valid_types
Gibt alle Typen zurück, für die die Zahl als gültig gilt.
phone_object.valid_types ==> [:fixed_line, :mobile, :toll_free]
valid?
Gibt einen booleschen Wert zurück, der angibt, ob valid_types
leer ist oder nicht.
phone_object.valid? ==> true
national_number(formatted: true)
Gibt die landesweit formatierte Zahl einschließlich Sonderzeichen wie Klammern und Bindestriche zurück. Sie können die Sonderzeichen weglassen, indem Sie formatted: false
übergeben
phone_object.national_number ==> "(317) 508-2237"
international_number(formatted: true)
Gibt die international formatierte Zahl einschließlich Sonderzeichen wie Klammern und Bindestriche zurück. Sie können die Sonderzeichen weglassen, indem Sie formatted: false
übergeben
phone_object.international_number ==> "+1 317-508-2237"
e164_number(formatted: true)
Gibt die international formatierte Zahl einschließlich Sonderzeichen wie Klammern und Bindestriche zurück. Sie können die Sonderzeichen weglassen, indem Sie formatted: false
übergeben
phone_object.e164_number ==> "+13175082237"
country
Gibt ein Objekt zurück, das Daten zum Land der Nummer enthält.
phone_object.country ===>
#
location
Gibt den Standort der Nummer zurück. Das Standardgebietsschema ist :en
phone_object.location ==> "Indiana"
phone_object.location(:ja) ==> "ソウル特別市"
timezone
Gibt die Zeitzone der Nummer zurück.
phone_object.timezone ==> "America/New_York"
Darüber hinaus stehen Ihnen die folgenden Klassenmethoden zur Verfügung.
parse
Gibt ein TelephoneNumber-Objekt zurück.
TelephoneNumber.parse("3175082237", :US)
Wenn Sie eine E164-formatierte Nummer übergeben, ermitteln wir das Land im Handumdrehen.
TelephoneNumber.parse("+13175082237")
valid?
Gibt einen booleschen Wert zurück, der angibt, ob eine bestimmte Zahl gültig ist oder nicht.
TelephoneNumber.valid?("3175082237", :US) ==> true
Wenn Sie eine Validierung anhand eines bestimmten Schlüsselsatzes durchführen möchten, können Sie ein Schlüsselarray übergeben
TelephoneNumber.valid?("3175082237", :US, [:mobile, :fixed_line]) ==> true
TelephoneNumber.valid?("3175082237", :US, [:toll_free]) ==> false
invalid?
Gibt einen booleschen Wert zurück, der angibt, ob eine bestimmte Zahl ungültig ist oder nicht.
TelephoneNumber.invalid?("3175082237", :US) ==> false
Wenn Sie einen bestimmten Schlüsselsatz ungültig machen möchten, können Sie ein Schlüsselarray übergeben
TelephoneNumber.invalid?("3175082237", :US, [:mobile, :fixed_line]) ==> false
TelephoneNumber.invalid?("3175082237", :US, [:toll_free]) ==> true
Für den Fall, dass Sie die von Google bereitgestellten Daten überschreiben müssen, können Sie dies tun, indem Sie eine Überschreibungsdatei festlegen. Es wird erwartet, dass diese Datei das gleiche Format wie die von Google hat und mit Marshal serialisiert ist.
So generieren Sie eine serialisierte Override-Datei:
ruby bin/console
TelephoneNumber.generate_override_file("/path/to/file")
In diesem Fall stellt /path/to/file
eine XML-Datei dar, die Ihre benutzerdefinierten Daten in derselben Struktur enthält wie die Daten von Google.
Sie können die Override-Datei festlegen mit:
TelephoneNumber.override_file = "/path/to_file.dat"
Wenn TelephoneNumber eine ungültige Nummer übergeben wird und dann aufgefordert wird, diese Nummer zu formatieren, wird einfach eine unformatierte Zeichenfolge der ursprünglich übergebenen Nummer zurückgegeben. Dies liegt daran, dass für ungültige Zahlen keine Formatierungsregeln gefunden werden. Wenn dies nicht akzeptabel ist, können Sie ein default_format_pattern
und default_format_string
festlegen, mit denen TelephoneNumber versucht, ungültige Nummern zu formatieren.
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"
Führen Sie nach dem Auschecken des Repos bin/setup
aus, um Abhängigkeiten zu installieren. Führen Sie dann rake test
aus, um die Tests auszuführen. Sie können auch bin/console
ausführen, um eine interaktive Eingabeaufforderung zu erhalten, mit der Sie experimentieren können.
Bei der Entwicklung neuer Funktionen möchten Sie möglicherweise Tests anhand bestimmter Telefonnummern durchführen. Fügen Sie dazu die Nummer zu lib/telephone_number/test_data_generator.rb
hinzu und führen Sie dann rake data:test:import
aus. Dieser Befehl greift auf die von Google bereitgestellte Demoanwendung zu und ruft die richtigen Formate zum Testen ab.
Um dieses Juwel auf Ihrem lokalen Computer zu installieren, führen Sie bundle exec rake install
aus.
Fehlerberichte und Pull-Requests sind auf GitHub unter https://github.com/mobi/telephone_number willkommen. Dieses Projekt soll ein sicherer, einladender Raum für die Zusammenarbeit sein, und von den Mitwirkenden wird erwartet, dass sie sich an den Verhaltenskodex der Mitwirkendenvereinbarung halten.
Das Juwel ist als Open Source unter den Bedingungen der MIT-Lizenz verfügbar.