Collection d'utilitaires JavaScript pour les tâches courantes

Validation d'adresses électroniques

Vérifie si une chaîne de caractères est un format d'adresse électronique valide.

export const estAdresseEmailValide = (chaine) => {
 return /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(chaine);
};

Validation de numéros de téléphone mobile

Vérifie si une chaîne correspond à un format de numéro de téléphone mobile français (commençant par 06 ou 07).

export const estMobileFrance = (chaine) => {
 return /^(0|\+33)[67]\d{8}$/.test(chaine);
};

Validation de numéros de téléphone fixe

Valide un format de numéro de téléphone fixe français (incluant les indicatifs régionaux).

export const estTelephoneFixeFrance = (chaine) => {
 return /^(0)\d{9}$/.test(chaine);
};

Vérification d'URL

Détermine si une chaîne est une URL valide.

export const estURL = (chaine) => {
 return /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(chaine);
};

Vérification de type de données

Fonctions utilitaires pour vérifier le type d'une variable (String, Number, Boolean, Function, Null, Undefined, Object, Array, Date, RegExp, Error, Symbol, Promise, Set).

export const estChaine = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'String';
};

export const estNombre = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Number';
};

export const estBooleen = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Boolean';
};

export const estFonction = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Function';
};

export const estNull = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Null';
};

export const estUndefined = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Undefined';
};

export const estObjet = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Object';
};

export const estTableau = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Array';
};

export const estDate = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Date';
};

export const estRegExp = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'RegExp';
};

export const estErreur = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Error';
};

export const estSymbol = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Symbol';
};

export const estPromise = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Promise';
};

export const estSet = (variable) => {
 return Object.prototype.toString.call(variable).slice(8, -1) === 'Set';
};

Détection de navigateur

Détermine si le visiteur utilise un navigateur basé sur WebKit, ou s'il s'agit d'un appareil mobile.

export const estNavigateurWebKit = () => {
 const agentUtilisateur = navigator.userAgent.toLowerCase();
 return /webkit|applewebkit/i.test(agentUtilisateur);
};

export const estAppareilMobile = () => {
 const agentUtilisateur = navigator.userAgent.toLowerCase();
 return /android|webos|iphone|ipad|ipod|blackberry|windows phone/i.test(agentUtilisateur);
};

export const estSurIos = () => {
 const agentUtilisateur = navigator.userAgent;
 return /iphone|ipad|ipod/i.test(agentUtilisateur);
};

export const estSurPC = () => {
 const agentUtilisateur = navigator.userAgent;
 return !/android|webos|iphone|ipad|ipod|blackberry|windows phone/i.test(agentUtilisateur);
};

Manipulation de chaînes de caractères

Fonctions pour supprimer les balises HTML, extraire des paramètres d'URL, et formater des chaînes.

export const supprimerBalisesHtml = (chaine) => {
 return chaine.replace(/<[^>]*>/g, '');
};

export const obtenirParametreUrl = (nomParametre) => {
 const regex = new RegExp('(^|&)' + nomParametre + '=([^&]*)(&|$)');
 const resultat = window.location.search.substr(1).match(regex);
 return resultat ? decodeURIComponent(resultat[2]) : null;
};

export const insererChaine = (chaineSource, index, nouvelleChaine) => {
 return chaineSource.slice(0, index) + nouvelleChaine + chaineSource.slice(index);
};

export const formaterTexte = (chaine, typeFormattage) => {
 switch (typeFormattage) {
   case 1: // Première lettre en majuscule
     return chaine.replace(/\b\w+\b/g, word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase());
   case 2: // Première lettre en minuscule
     return chaine.replace(/\b\w+\b/g, word => word.charAt(0).toLowerCase() + word.slice(1).toUpperCase());
   case 3: // Inverser la casse
     return chaine.split('').map(char => /[a-z]/.test(char) ? char.toUpperCase() : char.toLowerCase()).join('');
   case 4: // Tout en majuscules
     return chaine.toUpperCase();
   case 5: // Tout en minuscules
     return chaine.toLowerCase();
   default:
     return chaine;
 }
};

export const supprimerEspaces = (chaine, type) => {
 switch (type) {
   case 1: // Tous les espaces
     return chaine.replace(/\s+/g, "");
   case 2: // Espaces avant et après
     return chaine.replace(/(^\s*)|(\s*$)/g, "");
   case 3: // Espaces avant
     return chaine.replace(/(^\s*)/g, "");
   case 4: // Espaces après
     return chaine.replace(/(\s*$)/g, "");
   default:
     return chaine;
 }
};

Manipulation de tableuax

Fonctions pour trier, dédupliquer, trouver des unions et intersections, supprimer des éléments, et convertir des tableaux quasi-listes.

export const estContenuDansTableau = (tableau, valeur) => {
 return tableau.includes(valeur);
};

export const trierTableau = (tableau, typeTri = 1) => {
 const tableauCopie = [...tableau]; // Crée une copie pour ne pas modifier l'original
 switch (typeTri) {
   case 1: // Croissant
     return tableauCopie.sort((a, b) => a - b);
   case 2: // Décroissant
     return tableauCopie.sort((a, b) => b - a);
   case 3: // Aléatoire
     return tableauCopie.sort(() => Math.random() - 0.5);
   default:
     return tableauCopie;
 }
};

export const dedupliquerTableau = (tableau) => {
 if (Array.from) {
   return Array.from(new Set(tableau));
 } else {
   const unique = {};
   const resultats = [];
   for (let i = 0; i < tableau.length; i++) {
     if (!unique[tableau[i]]) {
       unique[tableau[i]] = true;
       resultats.push(tableau[i]);
     }
   }
   return resultats;
 }
};

export const unionTableaux = (tableauA, tableauB) => {
 return dedupliquerTableau(tableauA.concat(tableauB));
};

export const intersectionTableaux = (tableauA, tableauB) => {
 const tableauAUnique = dedupliquerTableau(tableauA);
 return tableauAUnique.filter(element => tableauB.includes(element));
};

export const supprimerElementTableau = (tableau, elementASupprimer) => {
 const index = tableau.indexOf(elementASupprimer);
 if (index > -1) {
   tableau.splice(index, 1);
 }
 return tableau;
};

export const convertirTableauQuasiListe = (objetQuasiListe) => {
 if (Array.isArray(objetQuasiListe)) {
   return objetQuasiListe;
 } else {
   return Array.prototype.slice.call(objetQuasiListe);
 }
};

export const trouverMaximum = (tableau) => {
 return Math.max(...tableau);
};

export const trouverMinimum = (tableau) => {
 return Math.min(...tableau);
};

export const calculerSomme = (tableau) => {
 return tableau.reduce((accumulateur, courant) => accumulateur + courant, 0);
};

export const calculerMoyenne = (tableau) => {
 if (tableau.length === 0) return 0;
 return calculerSomme(tableau) / tableau.length;
};

Utilitaires divers

Fonctions pour manipuler le DOM, gérer les promesses, et formater des nombres.

export const injecterScript = (src) => {
 const script = document.createElement('script');
 script.type = 'text/javascript';
 script.async = true;
 script.src = src;
 const premierScript = document.getElementsByTagName('script')[0];
 premierScript.parentNode.insertBefore(script, premierScript);
};

export const telechargerFichier = (url) => {
 const lien = document.createElement('a');
 lien.href = url;
 lien.download = url.substring(url.lastIndexOf('/') + 1);
 document.body.appendChild(lien);
 lien.click();
 document.body.removeChild(lien);
};

export const ajouterClasse = (element, nomClasse) => {
 if (element.classList) {
   element.classList.add(nomClasse);
 } else {
   const regex = new RegExp('(^|\\s)' + nomClasse + '(\\s|$)', 'g');
   if (!regex.test(element.className)) {
     element.className += ' ' + nomClasse;
   }
 }
};

export const supprimerClasse = (element, nomClasse) => {
 if (element.classList) {
   element.classList.remove(nomClasse);
 } else {
   const regex = new RegExp('(^|\\s)' + nomClasse + '(\\s|$)', 'g');
   element.className = element.className.replace(regex, ' ');
 }
};

export const contientClasse = (element, nomClasse) => {
 if (element.classList) {
   return element.classList.contains(nomClasse);
 } else {
   const regex = new RegExp('(^|\\s)' + nomClasse + '(\\s|$)', 'g');
   return regex.test(element.className);
 }
};

export const obtenirPositionScroll = (element = window) => ({
 x: element.pageXOffset !== undefined ? element.pageXOffset : element.scrollLeft,
 y: element.pageYOffset !== undefined ? element.pageYOffset : element.scrollTop
});

export const faireDefilerVersHaut = () => {
 const position = obtenirPositionScroll();
 if (position.y > 0) {
   window.requestAnimationFrame(faireDefilerVersHaut);
   window.scrollTo(0, position.y - position.y / 8);
 }
};

export const estElementVisibleDansViewport = (element, visibilitePartielle = false) => {
 const rect = element.getBoundingClientRect();
 const estVisible = (
   rect.top >= 0 &&
   rect.left >= 0 &&
   rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
   rect.right <= (window.innerWidth || document.documentElement.clientWidth)
 );
 if (visibilitePartielle) {
   return estVisible || (rect.top < (window.innerHeight || document.documentElement.clientHeight) && rect.bottom > 0) || (rect.left < (window.innerWidth || document.documentElement.clientWidth) && rect.right > 0);
 }
 return estVisible;
};

export const melangerTableau = (tableau) => {
 const resultat = [];
 const tableauCopie = [...tableau];
 while (tableauCopie.length > 0) {
   const indexAleatoire = Math.floor(Math.random() * tableauCopie.length);
   resultat.push(tableauCopie.splice(indexAleatoire, 1)[0]);
 }
 return resultat;
};

export const copierTexteDansPressePapiers = (texte) => {
 const textarea = document.createElement("textarea");
 textarea.style.height = "0";
 textarea.style.position = "absolute";
 textarea.style.opacity = "0";
 textarea.value = texte;
 document.body.appendChild(textarea);
 textarea.select();
 try {
   document.execCommand('copy');
 } catch (err) {
   console.error('Erreur lors de la copie du texte:', err);
 }
 document.body.removeChild(textarea);
};

export const verifierFormatChaine = (chaine, type) => {
 const formats = {
   telephone: /^1[3456789]\d{9}$/,
   fixe: /^(0\d{2,3}[- ]?\d{7,8})$/,
   carteIdentite: /(^\d{15}$)|(^\d{17}(\d|x|X)$)/,
   motDePasse: /^[a-zA-Z0-9_]{6,18}$/,
   codePostal: /^[1-9]\d{5}$/,
   qq: /^[1-9][0-9]{4,9}$/,
   email: /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/,
   montant: /^\d+(\.\d{1,2})?$/,
   url: /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/,
   ip: /((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)/,
   date: /^(\d{4})-(\d{2})-(\d{2})$/,
   nombre: /^[0-9]+$/,
   anglais: /^[a-zA-Z]+$/,
   chinois: /^[\u4E00-\u9FA5]+$/,
   minuscules: /^[a-z]+$/,
   majuscules: /^[A-Z]+$/,
   html: /<(\w+)[^>]*>(.*?)<\/\1>/
 };
 const regex = formats[type.toLowerCase()];
 return regex ? regex.test(chaine) : false;
};

export const estCarteIdentiteValide = (numero) => {
 if (!/(^\d{15}$)|(^\d{17}(\d|x|X)$)/.test(numero)) {
   console.error("Format de carte d'identité invalide.");
   return false;
 }

 const codesRegions = {
   11: "Beijing", 12: "Tianjin", 13: "Hebei", 14: "Shanxi", 15: "Inner Mongolia",
   21: "Liaoning", 22: "Jilin", 23: "Heilongjiang", 31: "Shanghai", 32: "Jiangsu",
   33: "Zhejiang", 34: "Anhui", 35: "Fujian", 36: "Jiangxi", 37: "Shandong",
   41: "Henan", 42: "Hubei", 43: "Hunan", 44: "Guangdong", 45: "Guangxi",
   46: "Hainan", 50: "Chongqing", 51: "Sichuan", 52: "Guizhou", 53: "Yunnan",
   54: "Tibet", 61: "Shaanxi", 62: "Gansu", 63: "Qinghai", 64: "Ningxia",
   65: "Xinjiang", 71: "Taiwan", 81: "Hong Kong", 82: "Macau", 91: "Others"
 };
 if (!codesRegions[parseInt(numero.substr(0, 2))]) {
   console.error("Code région de carte d'identité invalide.");
   return false;
 }

 const annee = parseInt(numero.substr(6, 4));
 const mois = parseInt(numero.substr(10, 2));
 const jour = parseInt(numero.substr(12, 2));
 const dateNaissance = new Date(annee, mois - 1, jour);
 if (dateNaissance.getFullYear() !== annee || dateNaissance.getMonth() !== mois - 1 || dateNaissance.getDate() !== jour) {
   console.error("Date de naissance invalide dans la carte d'identité.");
   return false;
 }

 const poids = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
 const codesVerification = "10X98765432";
 let somme = 0;
 for (let i = 0; i < numero.length - 1; i++) {
   somme += numero[i] * poids[i];
 }
 const dernierCaractere = codesVerification[somme % 11];
 if (numero[numero.length - 1].toUpperCase() !== dernierCaractere) {
   console.error("Le caractère de vérification de la carte d'identité est invalide.");
   return false;
 }

 return true;
};

export const genererNombreAleatoire = (min, max) => {
 if (arguments.length === 2) {
   return Math.floor(min + Math.random() * (max - min + 1));
 } else {
   console.warn("La fonction genererNombreAleatoire nécessite deux arguments.");
   return null;
 }
};

export const nombreEnChiffresArabes = (nombre) => {
 const unites = ["", "Dix", "Cent", "Mille"];
 const chiffres = ["Zéro", "Un", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf"];
 const fractions = ["", "Dix", "Cent", "Mille", "Dix Mille", "Cent Mille", "Million", "Dix Millions", "Cent Millions", "Milliard"];

 const chaineNombre = String(nombre).replace(/,/g, ""); // Supprime les virgules
 const partie = chaineNombre.split('.');
 let resultat = "";

 // Partie entière
 let partieEntiere = partie[0];
 if (partieEntiere === "0") {
   resultat = "Zéro";
 } else {
   let bloc = '';
   let k = 0;
   for (let i = partieEntiere.length - 1; i >= 0; i--) {
     const chiffre = parseInt(partieEntiere.charAt(i));
     if (chiffre !== 0) {
       bloc = chiffres[chiffre] + (k % 4 === 0 ? unites[k / 4] : "") + bloc;
     }
     if (k % 4 === 0 && chiffre !== 0 && i > 0 && parseInt(partieEntiere.charAt(i - 1)) === 0) {
       bloc = chiffres[0] + bloc; // Ajoute zéro si nécessaire
     }
     k++;
     if (k % 4 === 0) {
       resultat = bloc + unites[k / 4] + resultat;
       bloc = '';
     }
   }
   resultat = bloc + resultat;
 }

 // Partie décimale
 if (partie.length > 1) {
   resultat += " Point ";
   for (let i = 0; i < partie[1].length; i++) {
     resultat += chiffres[parseInt(partie[1].charAt(i))] + (i === 0 ? " Dix" : i === 1 ? " Cent" : "");
   }
 }

 // Nettoyage final
 resultat = resultat.replace(/ZéroDix/g, "Dix");
 resultat = resultat.replace(/ZéroCent/g, "Cent");
 resultat = resultat.replace(/ZéroMille/g, "Mille");
 resultat = resultat.replace(/ZéroMillion/g, "Million");
 resultat = resultat.replace(/ZéroMilliard/g, "Milliard");
 resultat = resultat.replace(/([Un|Deux|Trois|Quatre|Cinq|Six|Sept|Huit|Neuf])Dix/g, '$1Dix');
 resultat = resultat.replace(/([Un|Deux|Trois|Quatre|Cinq|Six|Sept|Huit|Neuf])Cent/g, '$1Cent');
 resultat = resultat.replace(/([Un|Deux|Trois|Quatre|Cinq|Six|Sept|Huit|Neuf])Mille/g, '$1Mille');
 resultat = resultat.replace(/([Un|Deux|Trois|Quatre|Cinq|Six|Sept|Huit|Neuf])Million/g, '$1Million');
 resultat = resultat.replace(/([Un|Deux|Trois|Quatre|Cinq|Six|Sept|Huit|Neuf])Milliard/g, '$1Milliard');
 resultat = resultat.replace(/DixDix/g, "Vingt"); // Cas spécifique pour 20
 resultat = resultat.replace(/DixCent/g, "DeuxCents"); // Cas spécifique pour 200
 resultat = resultat.replace(/DixMille/g, "VingtMille"); // Cas spécifique pour 20000

 return resultat;
};

export const convertirMontantEnLettres = (montant) => {
 if (typeof montant === "number") {
   montant = String(montant);
 }
 montant = montant.replace(/,/g, "").replace(/ /g, "").replace(/€/g, "");
 if (isNaN(montant)) {
   return "Montant invalide";
 }

 const unitesMaj = ["", "Un", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf"];
 const dizainesMaj = ["", "Dix", "Vingt", "Trente", "Quarante", "Cinquante", "Soixante", "Soixante-dix", "Quatre-vingt", "Quatre-vingt-dix"];
 const centainesMaj = ["", "Cent", "Deux-Cents", "Trois-Cents", "Quatre-Cents", "Cinq-Cents", "Six-Cents", "Sept-Cents", "Huit-Cents", "Neuf-Cents"];
 const grandeUnites = ["", "Mille", "Million", "Milliard"];

 const parties = montant.split(".");
 let partieEntiere = parties[0];
 let partieDecimale = parties.length > 1 ? parties[1] : "";

 let resultat = "";

 // Conversion de la partie entière
 let i = partieEntiere.length;
 let indexGrandeUnite = 0;
 while (i > 0) {
   let bloc = partieEntiere.substring(Math.max(0, i - 3), i);
   let blocConverti = "";
   let k = bloc.length;

   if (k > 0) {
     const centaine = parseInt(bloc.charAt(0)) || 0;
     const dizaine = parseInt(bloc.charAt(1)) || 0;
     const unite = parseInt(bloc.charAt(2)) || 0;

     if (centaine > 0) {
       blocConverti += centainesMaj[centaine];
     }
     if (dizaine === 1) {
       blocConverti += (blocConverti ? "-" : "") + dizainesMaj[10 + unite];
     } else if (dizaine === 7) {
       blocConverti += (blocConverti ? "-" : "") + dizainesMaj[6] + "-" + unitesMaj[unite];
     } else if (dizaine === 9) {
       blocConverti += (blocConverti ? "-" : "") + dizainesMaj[8] + "-" + unitesMaj[unite];
     } else if (dizaine > 1) {
       blocConverti += (blocConverti ? "-" : "") + dizainesMaj[dizaine];
       if (unite > 0) {
         blocConverti += "-" + unitesMaj[unite];
       }
     } else if (unite > 0) {
       blocConverti += unitesMaj[unite];
     }
   }

   if (blocConverti && indexGrandeUnite > 0) {
     resultat = blocConverti + " " + grandeUnites[indexGrandeUnite] + " " + resultat;
   } else if (blocConverti) {
     resultat = blocConverti + " " + resultat;
   }

   i -= 3;
   indexGrandeUnite++;
 }

 // Ajout de "Euros" et gestion des centimes
 if (!resultat.trim()) resultat = "Zéro";
 resultat += " Euros";

 if (partieDecimale) {
   if (partieDecimale.length > 2) {
     partieDecimale = partieDecimale.substring(0, 2);
   }
   let centimesConvertis = "";
   const d1 = parseInt(partieDecimale.charAt(0)) || 0;
   const d2 = parseInt(partieDecimale.charAt(1)) || 0;

   if (d1 === 1) {
     centimesConvertis = dizainesMaj[10 + d2];
   } else if (d1 === 7) {
     centimesConvertis = dizainesMaj[6] + "-" + unitesMaj[d2];
   } else if (d1 === 9) {
     centimesConvertis = dizainesMaj[8] + "-" + unitesMaj[d2];
   } else if (d1 > 1) {
     centimesConvertis = dizainesMaj[d1];
     if (d2 > 0) {
       centimesConvertis += "-" + unitesMaj[d2];
     }
   } else if (d2 > 0) {
     centimesConvertis = unitesMaj[d2];
   }
   if (centimesConvertis) {
     resultat += " et " + centimesConvertis + " Centimes";
   }
 }

 // Nettoyage final des espaces multiples
 resultat = resultat.replace(/\s+/g, ' ').trim();
 return resultat;
};

export const comparerObjets = (objA, objB) => {
 const propsA = Object.getOwnPropertyNames(objA);
 const propsB = Object.getOwnPropertyNames(objB);

 if (propsA.length !== propsB.length) {
   return false;
 }

 for (let i = 0; i < propsA.length; i++) {
   const nomProp = propsA[i];
   if (objA[nomProp] !== objB[nomProp]) {
     return false;
   }
 }
 return true;
};

export const couleurHexVersRgb = (valeurHex, opacite = null) => {
 const pattern = /^(#?)([a-fA-F0-9]{6})$/;
 if (!pattern.test(valeurHex)) {
   return '';
 }

 const hex = valeurHex.replace('#', '');
 const rgb = [];
 for (let i = 0; i < 3; i++) {
   const partie = hex.substring(i * 2, i * 2 + 2);
   rgb.push(parseInt(partie, 16));
 }

 if (opacite !== null && typeof opacite === 'number') {
   return `rgba(${rgb.join(',')},${opacite})`;
 } else {
   return `rgb(${rgb.join(',')})`;
 }
};

export const ajouterParametresUrl = (url, parametres) => {
 const urlObj = new URL(url);
 constSearchParams = urlObj.searchParams;

 if (typeof parametres === 'object') {
   for (const cle in parametres) {
     if (Object.hasOwnProperty.call(parametres, cle)) {
       searchParams.append(cle, parametres[cle]);
     }
   }
 } else if (typeof parametres === 'string') {
   // Si c'est une chaîne, on suppose qu'elle est déjà formatée (ex: "cle=valeur&autre=val")
   const paires = parametres.split('&');
   paires.forEach(paire => {
     const [cle, valeur] = paire.split('=');
     if (cle && valeur) {
       searchParams.append(cle, valeur);
     }
   });
 }

 urlObj.search = searchParams.toString();
 return urlObj.toString();
};

export const controleIntensiteMotDePasse = (motDePasse) => {
 let niveau = 0;
 if (motDePasse.length < 6) return niveau;
 if (/[0-9]/.test(motDePasse)) niveau++;
 if (/[a-z]/.test(motDePasse)) niveau++;
 if (/[A-Z]/.test(motDePasse)) niveau++;
 if (/[\.|-|_]/.test(motDePasse)) niveau++;
 return niveau;
};

Étiquettes: JavaScript utilitaires validation manipulation de chaînes manipulation de tableaux

Publié le 26 juillet à 10h46