4 votes

comment ajouter une chaîne définie par l'utilisateur dans une expression régulière

Bonjour, je valide une zone de texte qui ne doit accepter que des valeurs flottantes. J'utilise l'expression régulière suivante

^(?:[1-9]\\d*|0)?(?:[.]\\d+)?$

pour le valider. Maintenant, je veux ajouter une chaîne définie par l'utilisateur à l'intérieur de l'expression régulière pour que sa signification ne change pas. y a-t-il un moyen ?

2voto

Wiktor Stribiżew Points 100073

Pour valider si l'entrée est un nombre à virgule flottante, vous n'avez pas besoin d'une regex dans la plupart des cas, il suffit d'utiliser les classes intégrées pour analyser la chaîne d'entrée, et pour vérifier si une chaîne est égale à une autre, utilisez la méthode correspondante.

Si vous n'avez pas accès au code, vous pouvez utiliser une alternance :

"^(?:(?:[1-9]\\d*|0)?(?:[.]\\d+)?|MY STRING)?$"
  ^^^                            ^^^^^^^^^^^^

En La démo de regex est ici

En bref :

  • ^ - début de la chaîne
  • (?: - début du groupe optionnel de non-capture
    • (?:[1-9]\d*|0)?(?:[.]\d+)? - votre modèle précédent
    • | - ou
    • MY STRING - littéral MY STRING sous-chaîne
  • )? - fin de l'option (en raison de ? ) groupe non capturant
  • $ - fin de la chaîne

Si MY STRING est une variable d'entrée utilisateur qui doit être traitée comme un littéral, et si vous avez accès au code alors vous devriez penser à échapper à cette chaîne avec une méthode d'échappement de type regex (en Java, utiliser Pattern.quote(user_str) ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X