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 (
\dest é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;
}
}
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."); }