J'ai essayé d'exprimer le numéro de téléphone avec une expression régulière afin de valider le numéro de téléphone.
Veuillez vous référer à ce qui suit pour les expressions régulières.
Les débutants sont les bienvenus! Introduction aux expressions régulières qui peuvent être apprises à la main et avec les yeux, partie 1 "Cherchons des numéros de téléphone dans différents formats"
Créé lors de la vérification de l'expression régulière de ruby avec Ruby | Rubular #ruby # regular expression
Rubular (Vous pouvez le vérifier lors de la vérification de l'expression régulière)
Il existe différentes combinaisons (nombre de chiffres, traits d'union, parenthèses) dans le numéro de téléphone, mais cette fois nous l'exprimerons en supposant ce qui suit
· Téléphone fixe ・ 10 chiffres au total ・ La tête est 0 ・ 4 chiffres à la fin ・ Des traits d'union et des parenthèses peuvent être inclus (non requis)
·téléphone portable ・ 11 chiffres au total ・ Les 1er et 3ème chiffres sont 0 ・ Le deuxième chiffre est 5-9 ・ Des traits d'union et des parenthèses peuvent être inclus (non requis)
Les modèles de numéros de téléphone qui satisfont à ces critères sont grossièrement classés comme suit. (0 est fixe et x peut être n'importe quel nombre) ・ Téléphone fixe (10 chiffres)
0x-xxxx-xxxx 0xx-xxx-xxxx 0xxx-xx-xxxx 0xxxx-x-xxxx
・ Téléphone portable (11 chiffres) 050-xxxx-xxxx 060-xxxx-xxxx 070-xxxx-xxxx 080-xxxx-xxxx 090-xxxx-xxxx
Téléphone fixe:\A0(\d{1}[-(]?\d{4}|\d{2}[-(]?\d{3}|\d{3}[-(]?\d{2}|\d{4}[-(]?\d{1})[-)]?\d{4}\z ** Téléphone portable: \ A0 [5789] 0 [-]? \ D {4} [-]? \ D {4} \ z ** </ font>
\ A: représente un acronyme \ d {n}: numéro à n chiffres [- (]?: Contient "-" ou "(" (peut ne pas être disponible) |: or \ z: dernier caractère
Par souci de lisibilité, je les ai séparés comme suit. (\d{1}[-(]?\d{4}|\d{2}[-(]?\d{3}|\d{3}[-(]?\d{2}|\d{4}[-(]?\d{1})Est long et difficile à comprendre"|"Les sauts de ligne avec.
【Téléphone fixe】
【téléphone portable】
Dans cet esprit, j'ai écrit une validation et un test de numéro de téléphone.
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) } #Le FactoryBot de l'utilisateur est créé dans un fichier séparé.
it 'phone_Le format des nombres est correct' do
expect(user.phone_number).to match(VALID_PHONE_NUMBER_REGEX)
end
end
end
Ce qui suit a été ajouté en référence aux commentaires de @jnchito. (22/06/2020)
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,Le troisième chiffre est 0,10 au total-Générer un numéro de téléphone à 11 chiffres
end
end
Recommended Posts