2009-03-25 10 views
11

Je suis nouveau sur StackOverflow, alors s'il vous plaît laissez-moi savoir s'il y a une meilleure façon de poser la question suivante.RegEx Numeric Check

J'ai besoin de créer une expression régulière qui détecte si un champ dans la base de données est numérique et s'il est numérique, il se situe dans une plage valide (par exemple, 1-50). J'ai essayé [1-50], qui fonctionne à l'exception des cas où un nombre à un chiffre est précédé d'un 0 (c'est-à-dire 06). 06 devrait toujours être considéré comme un nombre valide, puisque je peux plus tard convertir cela en nombre.

J'apprécie vraiment votre aide! J'essaie d'en apprendre plus sur les expressions régulières, et j'ai appris tout ce que je peux: www.regular-expressions.info. Si vous avez des recommandations d'autres sites à faire, je l'apprécierais!

+0

en double: http://stackoverflow.com/questions/676467/how-to-match-numbers-between-x- et-y-avec-regexp –

+1

Je ne l'appellerais pas un doublon; c'est un cas particulier de l'autre problème, et beaucoup plus simple. –

+0

Cette question connexe pourrait être utile: [Comment faire correspondre les nombres entre X et Y avec regexp?] (Http://stackoverflow.com/questions/676467/) – Tomalak

Répondre

16

Essayez cette

^(0?[1-9])|([1-4][0-9])|(50)$ 

L'idée de ce regex est de briser le problème en cas

  • 0? [1-9] se charge du seul chiffre cas permettant une option 0
  • précédant
  • [1-4] [0-9] se charge de tous les numéros de 10 à 49. Cela a également allwows pour un 0 sur un précédente seul chiffre
  • 50 prend soin de 50
+0

@ybo, oui, il le fera. Mais ils ont dit qu'ils voulaient 06 alors j'ai supposé que 00 était également valide. – JaredPar

+0

@Jared, j'ai supprimé mon commentaire après votre modification, mais je comprends encore qu'il a besoin de valeurs entre 1 et 50. 0 et 00 devrait être exclu, je pense. – ybo

+0

@ybo, vous avez raison. J'ai mis à jour la réponse pour exclure toutes les formes de 0 – JaredPar

5

Les expressions régulières fonctionnent sur les caractères (dans ce cas, les chiffres) et non sur les nombres. Vous devez avoir un motif distinct pour chaque nombre de chiffres de votre motif, et les combiner avec | (l'opérateur OR) comme les autres réponses ont suggéré. Cependant, considérez simplement de vérifier si le texte est numérique avec une expression régulière (comme [0-9]+) puis de convertir en nombre entier et de vérifier que l'entier est à portée.

2

Vous ne pouvez pas facilement vérifier la distance avec des expressions régulières. Vous pouvez - avec un peu de travail - développer un modèle qui reconnaît une plage numérique, mais il est généralement assez complexe et difficile à modifier pour une gamme légèrement différente.

Vous feriez mieux de casser cela en deux parties.

  1. Reconnaître le modèle numérique (^\d+$).

  2. Vérifiez la plage de ce nombre dans un programme d'application.

0

^0 [1-50] {1,2}

$