Accueil > > > REGEX FOR GEOGRAPHICAL COORDINATE + VALIDATION
REGEX FOR GEOGRAPHICAL COORDINATE + VALIDATION
Information sur la source
Description
Essai sur la validation des coordonnées géographiques : Latitude et Longitude avec des expression régulières. Vu que je travaille avec le "Charset utf-8" je ne supporte pas le caractère du dégré :"°" ; raison pour laquelle j'ai utilisé des tirets : " - " pour être uniforme Ainsi: ----- "Geographical Coordinate Format is {N|S {:} [-90 to 90] - [00 to 60] - [00 to 60] } ou {W|E} [-180 to 180]} - [00 to 60] - [00 to 60] } " Je peux donc valider les chaînes suivantes juste pour donner quelques exemples: --> Latitude: N:45° - 42 - 07.24 .....le format normal est Latitude: N:45° 42' 07.24'' --> Longitude:W:060° - 21 - 37.22 .....le format normal est Longitude:W:060° 21' 37.22'' NOTA: ---- - Ce bout de code a été fait sous l'API D'EXTJs d'ou la gueule de mes fonctions. On peut toujours l'adapter pour ses propres besoins - Vu que je ne pouvais pas mettre toute la source, alors j'ai mis juste l'essentiel que l'on peut modifier et adapter à ses besoins. - Avec ces fonctions, on peut bien s'amuser et faire ce qu'on veut i hope !
Source
- //...some code ....
-
- //...My Regex rules
- /**
- * l'ensemble des regles de validation des coordonnes
- * geographiques.
- *
- * @author : marcel tawe
- * @param {void}
- * @return {JSON} rules, l'ensemble des regles
- */
- getRegexRuler : function () {
- //var latitude = /^(\s)*[nNsS](\s)*\:(\s)*[-+]?([0-8][0-9]|90)(\s)*\°(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\'(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)\''(\s)*$/ ;
- //var longitude= /^(\s)*[wWeE](\s)*\:(\s)*[-+]?(0?[0-9][0-9]|1[0-7][0-9]|180)(\s)*\°(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\'(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)\''(\s)*$/;
- //dms = (\s)* latitude | longitude (\s)*
- var rules = {
- decimal: /^[-+]?\d+(\.\d+)?$/,
- degre: /^[-+]?([0-8][0-9]|90)$/,
- minute: /^([0-5][0-9](\.\d+)?|60(\.\0+)?)$/,
- second: /^([0-5][0-9](\.\d+)?|60(\.\0+)?)$/,
- symbDeg: /^°$/,
- symbMin: /^'$/,
- symbSec: /^\''$/,
- dms : /^(\s)*([nNsS](\s)*\:(\s)*[-+]?([0-8][0-9]|90)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?))|([wWeE](\s)*\:(\s)*[-+]?(0?[0-9][0-9]|1[0-7][0-9]|180)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?))(\s)*$/
- }
-
- return rules ;
- },
-
- //....... Des fonctions utilitaires
- /**
- *
- * Validate an expression if it satisfy the correct
- * DMS format for a geographical coordinate
- *
- * @author : marcel tawe
- * @param {string} expr, the expression to test
- * @return {boolean} , is it a correct DMS format or no
- */
- isCorrectDMSFormat : function ( expr ){
- var regex = this.getRegexRuler();
- var correct = false ;
-
- if( regex.dms.test(expr) ){
- correct = true
- }
-
- return correct;
- },
-
- /**
- * Reads a string in a specific DMS format
- *
- * @author : marcel tawe
- * @param {string} expr,
- * @return{Object} val, a JSON representing the DMS format of the expr
- */
- parseDMS : function ( expr ){
- var dms = "";
- var parts ="";
-
- if( this.isCorrectDMSFormat(expr) ){
- dms = this.trim(expr.toString()); // to remove extras spaces
- parts = dms.split(/[^\d\w\.]+/);
- dms = {loc: parts[0], deg: parts[1] , min : parts[2] , sec: parts[3] };
- }
- else
- {
- dms = {loc: undefined, deg: undefined , min : undefined , sec: undefined };
- }
-
- return dms;
- },
-
- /**
- * Utilitaire permettant d'eliminer les espaces superflus
- * en debut et a la fin d'une chaine de caracteres
- *
- * @param {string} myString
- * @return {string} , la chaine de carateres depourvue de tout espace
- */
- trim : function (myString) {
- return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
- },
-
- /**
- * Validate the entry that the user gives to avoid error.
- * This function validates that we correctly entered the DMS
- * format and that we have respected the range of values
- *
- * NOTA: Coordinates out of range: lat >90°, <-90°; long >180°, < -180°
- *
- * @author : marcel tawe
- * @param {string} coordinate
- * @return {boolean} isValid ,
- */
- validateDMSRange :function ( coordinate ) {
- var dms = this.trim(coordinate); // to remove extras spaces
- var parts = dms.split(/[^\d\w\.]+/);
- var isValid = false ;
- var loc, rgDeg, rgMin ,rgSec;
-
- // Gets the DMS parts of string
- dms = this.parseDMS(coordinate);
-
- //Read the parts of the string
- loc = dms.loc; // W, N , S, E
- deg = parseFloat(dms.deg);//
- min = parseFloat(dms.min);//
- sec = parseFloat(dms.sec);//
-
- //Treatement depending if it's Longitude or Latitude
- if( loc.toUpperCase()=="E" || loc.toUpperCase()=="W" )
- {
- //Longitude
- rgDeg = (deg < 180 || deg > -180)? true : false;
- rgMin = (deg < 60 || deg > 0) ? true : false;
- rgSec = (deg < 60 || deg > 0) ? true : false;
- }
- else
- {
- //Latitude
- rgDeg = (deg < 90 || deg > -90) ? true : false;
- rgMin = (deg < 60 || deg > 0) ? true : false;
- rgSec = (deg < 60 || deg > 0) ? true : false;
- }
-
- //Was all the range's test correct
- if( rgDeg && rgMin && rgSec )
- isValid = true ;
-
- return isValid;
- }
-
- //......
//...some code ....
//...My Regex rules
/**
* l'ensemble des regles de validation des coordonnes
* geographiques.
*
* @author : marcel tawe
* @param {void}
* @return {JSON} rules, l'ensemble des regles
*/
getRegexRuler : function () {
//var latitude = /^(\s)*[nNsS](\s)*\:(\s)*[-+]?([0-8][0-9]|90)(\s)*\°(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\'(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)\''(\s)*$/ ;
//var longitude= /^(\s)*[wWeE](\s)*\:(\s)*[-+]?(0?[0-9][0-9]|1[0-7][0-9]|180)(\s)*\°(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\'(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)\''(\s)*$/;
//dms = (\s)* latitude | longitude (\s)*
var rules = {
decimal: /^[-+]?\d+(\.\d+)?$/,
degre: /^[-+]?([0-8][0-9]|90)$/,
minute: /^([0-5][0-9](\.\d+)?|60(\.\0+)?)$/,
second: /^([0-5][0-9](\.\d+)?|60(\.\0+)?)$/,
symbDeg: /^°$/,
symbMin: /^'$/,
symbSec: /^\''$/,
dms : /^(\s)*([nNsS](\s)*\:(\s)*[-+]?([0-8][0-9]|90)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?))|([wWeE](\s)*\:(\s)*[-+]?(0?[0-9][0-9]|1[0-7][0-9]|180)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?)(\s)*\-(\s)*([0-5][0-9](\.\d+)?|60(\.\0+)?))(\s)*$/
}
return rules ;
},
//....... Des fonctions utilitaires
/**
*
* Validate an expression if it satisfy the correct
* DMS format for a geographical coordinate
*
* @author : marcel tawe
* @param {string} expr, the expression to test
* @return {boolean} , is it a correct DMS format or no
*/
isCorrectDMSFormat : function ( expr ){
var regex = this.getRegexRuler();
var correct = false ;
if( regex.dms.test(expr) ){
correct = true
}
return correct;
},
/**
* Reads a string in a specific DMS format
*
* @author : marcel tawe
* @param {string} expr,
* @return{Object} val, a JSON representing the DMS format of the expr
*/
parseDMS : function ( expr ){
var dms = "";
var parts ="";
if( this.isCorrectDMSFormat(expr) ){
dms = this.trim(expr.toString()); // to remove extras spaces
parts = dms.split(/[^\d\w\.]+/);
dms = {loc: parts[0], deg: parts[1] , min : parts[2] , sec: parts[3] };
}
else
{
dms = {loc: undefined, deg: undefined , min : undefined , sec: undefined };
}
return dms;
},
/**
* Utilitaire permettant d'eliminer les espaces superflus
* en debut et a la fin d'une chaine de caracteres
*
* @param {string} myString
* @return {string} , la chaine de carateres depourvue de tout espace
*/
trim : function (myString) {
return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
},
/**
* Validate the entry that the user gives to avoid error.
* This function validates that we correctly entered the DMS
* format and that we have respected the range of values
*
* NOTA: Coordinates out of range: lat >90°, <-90°; long >180°, < -180°
*
* @author : marcel tawe
* @param {string} coordinate
* @return {boolean} isValid ,
*/
validateDMSRange :function ( coordinate ) {
var dms = this.trim(coordinate); // to remove extras spaces
var parts = dms.split(/[^\d\w\.]+/);
var isValid = false ;
var loc, rgDeg, rgMin ,rgSec;
// Gets the DMS parts of string
dms = this.parseDMS(coordinate);
//Read the parts of the string
loc = dms.loc; // W, N , S, E
deg = parseFloat(dms.deg);//
min = parseFloat(dms.min);//
sec = parseFloat(dms.sec);//
//Treatement depending if it's Longitude or Latitude
if( loc.toUpperCase()=="E" || loc.toUpperCase()=="W" )
{
//Longitude
rgDeg = (deg < 180 || deg > -180)? true : false;
rgMin = (deg < 60 || deg > 0) ? true : false;
rgSec = (deg < 60 || deg > 0) ? true : false;
}
else
{
//Latitude
rgDeg = (deg < 90 || deg > -90) ? true : false;
rgMin = (deg < 60 || deg > 0) ? true : false;
rgSec = (deg < 60 || deg > 0) ? true : false;
}
//Was all the range's test correct
if( rgDeg && rgMin && rgSec )
isValid = true ;
return isValid;
}
//......
Conclusion
Les commentaires sont les bienvenues.
Historique
- 16 décembre 2010 20:31:44 :
- juste changer le titre pour faciliter la recherche
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
résolution de logigramme [ par BettyP ]
Je dois résoudre un logigramme qui ne comporte que des chiffres et des nombres, et aucun indice. >>Il faut que j'en déduise une longitude et un
Comment créer un regex pour "ABS", "R".... [ par beegeezzz ]
Bonjour tout le monde, J'aimerais savoir comment je peux créer un regex afin d'empêcher une zone de texte d'avoir comme valeur autre chose que ceci :
Regex: validation du nom et prénom [ par adbundy ]
Bonjour à tous, je voudrai au submit du formulaire vérifier mes champs "Nom" et "Prénom" à l'aide d'une regex en remplissant les criètres suivants :
Regex pour éviter une chaine [ par syndrael ]
Bonjour, La question toute bête mais qui me prouve qu'il me reste encore à progresser sur les Expressions régulières.. Je cherche à remplacer les '0'
regex javascript compatibilité [ par camellion2 ]
Bonjour à tous, J'ai un souci avec une regex sous javascript qui me permet de verifier que l'utilisateur a bien tapé un entier ou un décimal du type
regex [ par ribeirospr ]
bonjour comment construire la vérification d'un code postal avec se format (exemple 1234-123) merci d’avance
Regex et les URLs [ par Nicokiller_com ]
Je vais devenir fou, j'arrive pas à mettre toutes les urls d'un code html reçu par ajax en lien avec regex!!! genre "http:/
Probleme de Regex [ par DoomRider ]
Voila j'ai de nouveau des problemes de regex auquel j'ai pas trouvé de réponses en faisant des test et des recherche, je les met tous dans ce post >
La Regex qu'elle est la mieux [ par sapakus ]
Bonjour, pour mettre en forme un numéro de téléphone du type 0123456789 en 01.23.45.67.89, j'utilise la méthode replace avec un regex :var numero='012
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
UTILISER UN .JSUTILISER UN .JS par zaikoe
Cliquez pour lire la suite par zaikoe
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|