1
votes

Regex pour le numéro de mobile rend la parathèse facultative pour le code du pays et les tirets, les points et les espaces sont facultatifs

1234567890
123-456-7890
123.456.7890
123 456 7890
(123)4567890
(123)-456-7890
(123).456.7890
(123) 456 7890

0 commentaires

4 Réponses :


0
votes

() est un caractère spécial est regex donc vous devez les échapper, pour le rendre facultatif, vous pouvez utiliser ?

Vous pouvez changer votre modèle en ceci

const regex = /^([0-9]{3}|\([0-9]{3}\))([-. ]?)([0-9]{3})\2([0-9]{4})$/gm;
const str = `1234567890
123-456-7890
123.456.7890
123 456 7890
(123)4567890
(123)-456-7890
(123).456.7890
(123) 456 7890
(123 456 7890
(123 456 7890
123-456.7890`;
let m;

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  m.forEach((match, groupIndex) => {
    console.log(`Found match, group ${groupIndex}: ${match}`);
  });
  console.log('------')
}

Démo Regex

^([0-9]{3}|\([0-9]{3}\))([-. ]?)([0-9]{3})\2([0-9]{4})$


0 commentaires

4
votes

Vous pouvez utiliser un groupe de capture avec une backreference pour obtenir des délimiteurs cohérents et une alternative pour obtenir la version avec ou sans parenthèses de sorte que par exemple 123-456.7890 ou (123-456-7890 ne soit pas une correspondance valide.

let pattern = /^(?:\(\d{3}\)([-. ]?)\d{3}\1\d{4}|\d{3}([-. ]?)\d{3}\2\d{4})$/;
[
  "1234567890",
  "123-456-7890",
  "123.456.7890",
  "123 456 7890",
  "(123)4567890",
  "(123)-456-7890",
  "(123).456.7890",
  "(123) 456 7890",
  "(123-456-7890",
  "123-456.7890"
].forEach(s => console.log(s + " --> " + pattern.test(s)));
  • ^ Début de chaîne
  • (?: Groupe sans capture
    • \ (\ d {3} \) Correspondance (, 3 chiffres et )
    • ([-.]?) Capturer le groupe 1 , éventuellement correspondre à - . ou espace
    • \ d {3} \ 1 \ d {4} Correspondance à 3 chiffres, référence arrière au groupe 1 et 4 chiffres
    • | Ou
    • \ d {3} Correspondre à 3 chiffres
    • ([-.]?) Capturer le groupe 2 , éventuellement correspondre à - . ou espace
    • \ d {3} \ 2 \ d {4} `Correspond à 3 chiffres, référence arrière aux chiffres des groupes 2 et 4
  • )
  • $ Fin de chaîne

Démo Regex

^(?:\(\d{3}\)([-. ]?)\d{3}\1\d{4}|\d{3}([-. ]?)\d{3}\2\d{4})$


0 commentaires

2
votes

Vous pouvez utiliser ce

^\(?[0-9]{3}\)?[\-\.\s]?\(?[0-9]{3}\)?[\-\.\s]?\(?[0-9]{4}\)?$

Testez-le ici https://regex101.com/


1 commentaires

^ \ (? [0-9] {3} \)? [-. ]? ([0-9] {3}) [-. ]? ([0-9] {4}) $ cela a fonctionné pour moi



0
votes

Probablement comme ceci

var patt = new RegExp('\\(?[0-9]{3}\\)?[.-\\s]?[0-9]{3}[.-\\s]?[0-9]{4}');


0 commentaires