1
^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(([-+]?)([\d]{1,3})((\.)(\d+))?)$ 

J'essaie d'utiliser cette expression rationnelle ci-dessus pour pouvoir confirmer que les données sont des coordonnées valides. J'ai du mal à faire fonctionner cela avec les règles de Firebase. Lorsque je lance la regex dans un testeur d'expressions régulières en ligne, cela fonctionne, mais les règles de Firebase ne semblent pas l'accepter.Firebase règle les problèmes regex

Voici ma règle firebase:

".validate": "newData.isString() && newData.val().matches(/^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(([-+]?)([\d]{1,3})((\.)(\d+))?)$/)" 

est-il de toute façon d'obtenir ce travail?

+0

Post code complet pour la compréhension. – Rahul

Répondre

2

Vous devez doubler les barres obliques inverses, mais honnêtement, votre expression contient trop de constructions de regroupement redondantes.

Utilisez

.matches(/^[-+]?\\d{1,2}\\.\\d+,[-+]?\\d{1,3}(\\.\\d+)?$/) 

ou d'éviter les antislashs tout à fait:

.matches(/^[-+]?[0-9]{1,2}[.][0-9]+,[-+]?[0-9]{1,3}([.][0-9]+)?$/) 

L'expression rationnelle correspond à des chaînes like in this online demo.

Détails:

  • ^ - début de la chaîne (en Firebase regex, il est un point d'ancrage lorsqu'il est utilisé au début du motif uniquement)
  • [-+]?-1 ou 0 + ou -
  • [0-9]{1,2} - 1 ou 2 chiffres
  • [.] - un point
  • [0-9]+ - 1+ chiffres
  • , - une virgule
  • [-+]?-1 ou 0 +- ou
  • [0-9]{1,3}-1 à 3 chiffres
  • ([.][0-9]+)?-1 ou 0 séquences de . et 1+ (chiffres notez que les groupes non-capturants ne sont pas pris en charge)
  • $ - fin de l'ancre de chaîne (uniquement lorsque la fin du motif est $ correspond à la fin de la chaîne dans Firebase regex).
+0

Merci beaucoup. Exactement ce que je cherchais. Cela fonctionne très bien! –