2013-01-10 2 views
1

J'essaie d'écrire une expression regural pour valider la clause SQL IN où les valeurs entre parenthèses sont des nombres (ids) par exemple (23,109,1) mais pas (23,109) ou (23 ,,) ou() .Clause SQL IN RegEx

Mon expression actuelle est:

^\([0-9,]+\)$ 

mais il permet aussi de mauvaises valeurs.

Je ne suis pas vraiment bon à des expressions regural, a aussi essayé quelque chose comme:

^\(([0-9]+,)+\)$ 

mais je suppose que ce n'est pas le point.
Des idées?

+0

Peut-être publier un petit code sur où vous générez la clause IN dans le code. Peut-être plus facile d'y répondre. Aussi, il y a de fortes chances que vous puissiez le corriger en tant que SQL JOIN à la place. – ficuscr

+1

Je ferais quelque chose comme ['\ ([0-9] + \ s * (, \ s * [0-9] + \ s *) * \)'] (http://rubular.com/r/3YVCFbSgjH) – NullUserException

Répondre

3

Votre deuxième essai est presque là; le problème est, ^\(([0-9]+,)+\)$ nécessiterait virgule. Essayons ^\([0-9]+(,[0-9]+)*\)$.

Aucune idée sur votre bibliothèque/dialecte regex; peut-être y a-t-il beaucoup à améliorer (\ d pour les chiffres, autoriser les espaces entre les éléments, etc.).

+0

Merci! Je suppose que c'est la bonne réponse. Les espaces ne sont pas le problème pour moi, parce que je supprime tous les espaces plus tôt. – gysyky