Ich habe versucht, die Telefonnummer mit einem regulären Ausdruck auszudrücken, um die Telefonnummer zu überprüfen.
Bitte beachten Sie die folgenden regulären Ausdrücke.
Anfänger willkommen! Einführung in reguläre Ausdrücke, die von Hand und Augen gelernt werden können, Teil 1 "Suchen wir nach Telefonnummern in verschiedenen Formaten"
Erstellt beim Überprüfen des regulären Ausdrucks von Ruby mit Ruby | Rubular #ruby #regular expression
Rubular (Sie können dies überprüfen, während Sie den regulären Ausdruck überprüfen.)
Es gibt verschiedene Kombinationen (Anzahl der Ziffern, Bindestriche, Klammern) in der Telefonnummer, aber dieses Mal werden wir es unter der Annahme des Folgenden ausdrücken
· Festnetztelefon ・ Insgesamt 10 Ziffern ・ Kopf ist 0 ・ 4 Ziffern am Ende ・ Bindestriche und Klammern können enthalten sein (nicht erforderlich)
·Mobiltelefon
・ Die 1. und 3. Stelle sind 0 ・ Die zweite Ziffer ist 5-9 ・ Bindestriche und Klammern können enthalten sein (nicht erforderlich)
Die Muster von Telefonnummern, die diese erfüllen, werden grob wie folgt klassifiziert. (0 ist fest und x kann eine beliebige Zahl sein) ・ Festes Telefon (10 Ziffern)
0x-xxxx-xxxx 0xx-xxx-xxxx 0xxx-xx-xxxx 0xxxx-x-xxxx
・ Mobiltelefon (11 Ziffern) 050-xxxx-xxxx 060-xxxx-xxxx 070-xxxx-xxxx 080-xxxx-xxxx 090-xxxx-xxxx
Festnetztelefon:\A0(\d{1}[-(]?\d{4}|\d{2}[-(]?\d{3}|\d{3}[-(]?\d{2}|\d{4}[-(]?\d{1})[-)]?\d{4}\z ** Mobiltelefon: \ A0 [5789] 0 [-]? \ D {4} [-]? \ D {4} \ z ** </ font>
\ A: Repräsentiert ein Akronym \ d {n}: n-stellige Nummer [- (]?: Enthält "-" oder "(" (möglicherweise nicht verfügbar) |: or \ z: Letztes Zeichen
Aus Gründen der Lesbarkeit habe ich sie wie folgt getrennt. (\d{1}[-(]?\d{4}|\d{2}[-(]?\d{3}|\d{3}[-(]?\d{2}|\d{4}[-(]?\d{1})Ist lang und schwer zu verstehen"|"Ich habe eine neue Linie mit begonnen.
【Festnetztelefon】
【Mobiltelefon】
In diesem Sinne habe ich eine Validierung und einen Test der Telefonnummer geschrieben.
User.rb
class User < ApplicationRecord
VALID_PHONE_NUMBER_REGEX = /\A0(\d{1}[-(]?\d{4}|\d{2}[-(]?\d{3}|\d{3}[-(]?\d{2}|\d{4}[-(]?\d{1})[-)]?\d{4}\z|\A0[5789]0[-]?\d{4}[-]?\d{4}\z/
validates :phone_number, presence: true, format: { with: VALID_PHONE_NUMBER_REGEX }
end
user_spec.rb
RSpec.describe User, type: :model do
before do
stub_const('VALID_PHONE_NUMBER_REGEX', \A0(\d{1}[-(]?\d{4}|\d{2}[-(]?\d{3}|\d{3}[-(]?\d{2}|\d{4}[-(]?\d{1})[-)]?\d{4}\z|\A0[5789]0[-]?\d{4}[-]?\d{4}\z)
end
context 'Format' do
let(:user) { FactoryBot.create(:user) } #Der FactoryBot des Benutzers wird in einer separaten Datei erstellt.
it 'phone_Das Zahlenformat ist korrekt' do
expect(user.phone_number).to match(VALID_PHONE_NUMBER_REGEX)
end
end
end
Das Folgende wurde unter Bezugnahme auf die Kommentare von @jnchito hinzugefügt. (2020/6/22)
spec/factories/users.rb
FactoryBot.define do
factory :user do
phone_number { "0#{rand(0..9)}0#{rand(1_000_000..99_999_999)}" }
# 1,Die dritte Ziffer ist 0,10 insgesamt-Generieren Sie eine 11-stellige Telefonnummer
end
end
Recommended Posts