begin process at 2012 05 28 14:40:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > REGEX FOR GEOGRAPHICAL COORDINATE + VALIDATION

REGEX FOR GEOGRAPHICAL COORDINATE + VALIDATION


 Information sur la source

Note :
Aucune note
Catégorie :Trucs & Astuces Classé sous :Geographical Coordinate, Regex, ExtJs-geocoordinate, latitude, longitude Niveau :Initié Date de création :16/12/2010 Date de mise à jour :16/12/2010 20:31:44 Vu :2 531

Auteur : marcelsnews

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 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

Source avec Zip Source avec une capture INTERAGIR AVEC LES USAGERS ...SANS UTILISER DES 'ALERTS'
Source avec Zip MODIFICATION DYANAMIQUE DES PARAMÈTRES D'UNE FONCTION D'UN [...

 Sources de la même categorie

PARSER LES CARACTÈRES HTML D'UNE STRING par jdmcreator
CONSTRUCTION D'UNE TABLE TRIABLE À PARTIR D'UN TABLEAU 2D par phm
Source avec Zip Source avec une capture SUBDIVISER LE RÉSULTAT D'UNE RECHERCHE EN PAGES par kimmp
Source avec Zip TIMER : SETTIMEOUT & SETINTERVAL AMÉLIORÉS par jdmcreator
Source avec Zip Source avec une capture ONGLETS ET CHANGEMENT INSTANTANÉ DE LA LANGUE par william voirol

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture RÉSOUDRE UNE ÉQUATION EN 6 ÉTAPES par Zestyr
VALIDER UN NUMÉRO DE TÉLÉPHONE FRANÇAIS par webdeb

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


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. &gt;&gt;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&#8217;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 &gt 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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,716 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales