[RUBY] Ich habe versucht, die Telefonnummer (Festnetz / Mobiltelefon) mit einem regulären Ausdruck in Rails auszudrücken und Validierung und Test zu schreiben

Einführung

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.)

Telefonnummer Voraussetzungen

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

Als regulärer Ausdruck ausgedrückt (Kopieren und Einfügen ist in Ordnung !!)

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> 正規表現_Rubular.png

Erklärung der regulären Ausdrücke

\ 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】 正規表現_固定.png

【Mobiltelefon】 正規表現_携帯.png

Validierung und Test mit Rspec

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

Ich habe versucht, die Telefonnummer (Festnetz / Mobiltelefon) mit einem regulären Ausdruck in Rails auszudrücken und Validierung und Test zu schreiben
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich habe versucht, die Sitzung in Rails zu organisieren
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine Methode aufrufen und die Nummer zählen
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
Ich habe versucht, den Weihnachtsbaum in einem Lebensspiel zu beleuchten
Daten sortieren Absteigend, aufsteigend / Schienen
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
Erstellen Sie eine Bulletin-Board-API mit Autorisierung in Rails 6 # 11. Benutzermodelltest und Validierung hinzugefügt
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
Ersetzen Sie durch einen Wert entsprechend der Übereinstimmung mit einem regulären Java-Ausdruck
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
<java> Teilen Sie die Adresse vor und nach der Adresse mit einem regulären Ausdruck
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Ich möchte einen Unit Test schreiben!
In dieser Zeit habe ich versucht, Java Bean und XML mit dem Jackson-Formatierer XML zu konvertieren
Ich habe versucht, eine Webanwendung zu erstellen, die Tweets mit einer Vue-Word-Cloud durchsucht und die Tendenz untersucht, was im zugehörigen Profil geschrieben steht
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Schreiben Sie einen Test, indem Sie die Geschichte von Mr. Nabeats in der Welt mit Rubin umsetzen
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Schreiben Sie zur Implementierung den Test und codieren Sie den Prozess
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich möchte ein kleines Symbol in Rails verwenden
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
[So fügen Sie ein Video mit Rails in haml ein]
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
So schreiben Sie eine Datumsvergleichssuche in Rails
Ich möchte eine Funktion in der Rails Console definieren
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
# 4 nach Validierung und Testimplementierung zum Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6
Nachdem ich einen Artikel mit Rails Simple Calendar veröffentlicht habe, möchte ich ihn im Kalender wiedergeben.
Klicken Sie auf die Schaltfläche [Schienen], um ein zufälliges alphanumerisches Kennwort zu erstellen und in das Kennwortfeld einzugeben
^, $ im regulären Ausdruck von Rails
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren