1234567890 123-456-7890 123.456.7890 123 456 7890 (123)4567890 (123)-456-7890 (123).456.7890 (123) 456 7890
4 Réponses :
() 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('------')
}
^([0-9]{3}|\([0-9]{3}\))([-. ]?)([0-9]{3})\2([0-9]{4})$
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
) $ Fin de chaîne
^(?:\(\d{3}\)([-. ]?)\d{3}\1\d{4}|\d{3}([-. ]?)\d{3}\2\d{4})$
Vous pouvez utiliser ce
^\(?[0-9]{3}\)?[\-\.\s]?\(?[0-9]{3}\)?[\-\.\s]?\(?[0-9]{4}\)?$
Testez-le ici https://regex101.com/
^ \ (? [0-9] {3} \)? [-. ]? ([0-9] {3}) [-. ]? ([0-9] {4}) $ cela a fonctionné pour moi
Probablement comme ceci
var patt = new RegExp('\\(?[0-9]{3}\\)?[.-\\s]?[0-9]{3}[.-\\s]?[0-9]{4}');