Une fonction Trim et une fonction de réduction d'espaces

La fonction trim (supprimer les espaces en début et fin d'une chaine de caractères) n'existe pas en Javascript. Grâce aux expressions régulières nous allons la créer :

str = str.replace(/^\s*|\s*$/,"");

C'est à dire : remplacer zero ou plusieurs (*) chaînes considérées comme des espaces (\s) au début (^) ou (|) à la fin ($) avec rien ("").

Pour remplacer (au sein d'une chaîne) plusieurs espaces par un seul :

str = str.replace(/\s+/g," ");
// "je   suis  un peu    distrait" => "je suis un peu distrait"

Le plus élégant est bien sûr d'ajouter ces fonctionnalités sous forme de méthodes de la classe String, afin de pouvoir les utiliser partout :

String.prototype.trim = function () {
   return this.replace(/^\s*|\s*$/,"");
}
String.prototype.simplify= function () {
   return this.replace(/\s+/g," ");
}

Vous pouvez ainsi les utiliser simplement :

a = a.trim();
b = b.simplify();

Validation d' une adresse mail :

function isValidEmail(emailAddress) {

   var re = /^(([^<>()[\]\\.,;:\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,}))$/
    return re.test(emailAddress);
}

Cette expression, pour indigeste qu'elle paraisse, présente l'avantage d'accepter après le '@'

  • un domaine en lettres (domaine.extension) [a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}, cad "au moins une lettre ou un chiffre ou le caractère -, puis un point", cette séquence doit apparaître au moins une fois, pour finir puis au moins deux lettres
  • ou une adresse IP, dont on retrouve le motif à l'exemple suivant (\d est équivalent à [0-9])


Explications complètes ici. Attention ! Sur cette page, l'explication est bonne, mais pas l'expression donnée en modèle, qui est un peu différente de celle indiquée ci-dessus.

Validation d'une adresse IP

function isValidIPAddress(ipaddr) {
  var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
  if (re.test(ipaddr)) {
     var parts = ipaddr.split(".");
     if (parseInt(parseFloat(parts[0])) == 0) { return false; }
     for (var i=0; i<parts.length; i++) {
        if (parseInt(parseFloat(parts[i])) > 255) { return false; }
     }
     return true;
  } else {
     return false;
  }
}

Explications ici

Validation d'une date

function isValidDate(dateStr, format) {
  if (format == null) { format = "MDY"; }
  format = format.toUpperCase();
  if (format.length != 3) { format = "MDY"; }
  if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || _
     (format.indexOf("Y") == -1) ) { format = "MDY"; }
  if (format.substring(0, 1) == "Y") { // If the year is first
     var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
     var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
  } else if (format.substring(1, 2) == "Y") { // If the year is second
     var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
     var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
  } else { // The year must be third
     var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
     var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
  }
  // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
  if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }
  var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
  // Check to see if the 3 parts end up making a valid date
  if (format.substring(0, 1) == "M") { var mm = parts[0]; } else _
     if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; }
  if (format.substring(0, 1) == "D") { var dd = parts[0]; } else _
     if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; }
  if (format.substring(0, 1) == "Y") { var yy = parts[0]; } else _
     if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; }
  if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
  if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
  var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
  if (parseFloat(dd) != dt.getDate()) { return false; }
  if (parseFloat(mm)-1 != dt.getMonth()) { return false; }
  return true;
}

Cette fonction retourne true si la date est valide et false sinon. Vous pouvez donc l'utiliser de cette façon :

if (!isValidDate(myDateString, "DMY")) { alert("The date is not in the correct format."); }

Explications ici