6 votes

Expressions régulières SQL

J'ai créé le motif de regex SQL suivant pour correspondre à un ISBN :

CREATE RULE ISBN_Rule AS @valeur LIKE 'ISBN\x20(?=.{13}$)\d{1,5}([-])\d{1,7}\1\d{1,6}\1(\d|X)$'

J'ai utilisé les valeurs suivantes comme données de test ; cependant, les données ne sont pas validées :

ISBN 0 93028 923 4 | ISBN 1-56389-668-0 | ISBN 1-56389-016-X

Où est-ce que je me trompe ?

6voto

kelloti Points 4157

L'opérateur LIKE dans SQL Server n'est pas un opérateur regex. Vous pouvez réaliser certaines correspondances de motifs compliquées, mais ce n'est pas une syntaxe regex normale.

http://msdn.microsoft.com/en-us/library/ms179859.aspx

6voto

gbn Points 197263

Vous pouvez le faire en utilisant LIKE.

Vous aurez besoin de certains OR pour gérer les différents formats ISBN 10 et 13

Pour les chaînes ci-dessus:

LIKE 'ISBN [0-9][ -][0-9][0-9][0-9][0-9][0-9][ -][0-9][0-9][0-9][ -][0-9X]'

4voto

RichardTheKiwi Points 58121

SQL Server 2005 ne prend pas en charge les expressions REGEX par défaut, vous auriez besoin d'Automation OLE ou d'un CLR pour fournir cette fonctionnalité via une UDF.

Les seuls caractères génériques pris en charge sont % (n'importe lequel) et _ (un), et les correspondances de plage de caractères (ou de négation) en utilisant [] en option [^]. Donc votre expression

'ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$'

Signifie quelque chose de très bizarre avec la plage [- ] et tout le reste étant littéral.

1voto

Si cela se divise sur | et ne supprime pas les espaces vides, il manque probablement un espace avant ISBN et/ou après (\d|X) ici $ .. De plus, je doute que ce soit le problème, mais [- ] pourrait être [ -]

éditer : ok, eh bien gardez cela à l'esprit lorsque vous obtenez une librairie/contrôle regex.

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