2

J'essaie de m'assurer qu'un champ d'un objet dans Firebase est un entier et non un nombre décimal. Il existe une méthode isNumber() mais elle renvoie true lorsque la valeur est un nombre entier ou un nombre décimal.Comment valider cette valeur est un entier avec les règles Firebase

J'ai essayé de vérifier une valeur avec regex, mais pour une raison quelconque, cela fonctionne correctement uniquement avec des valeurs entre guillemets, c'est-à-dire des chaînes.

Voici comment ma règle ressemble:

"$item_id":{ 
    "created":{ 
    ".validate":"newData.val().matches(/^[0-9]+$/)" 
    } 
} 

Alors, quand je mets un objet avec une valeur de chaîne comme cette validation {"created":"123456789"} fonctionne très bien. Mais quand je mets un objet avec la valeur numérique {"created":123456789} échoue.

Existe-t-il un moyen de le faire?

Répondre

3

Vous ne pouvez pas utiliser une expression régulière pour valider un nombre, car les expressions régulières correspondent aux modèles dans les chaînes.

Vous ne pouvez pas vraiment valider que quelque chose est un entier, car JavaScript n'a pas de type entier séparé par rapport au type virgule flottante. Ils sont tous juste des nombres à virgule flottante. Ce que peut valider est que quelque chose est un nombre entier. La façon la plus simple que je pourrais trouver est:

".validate":"newData.isNumber() && newData.val() % 1 === 0.0" 

Ce accepte 1 et 1.0, mais rejetteront 1.1.