2013-01-19 2 views
3

J'ai plusieurs regex PHP que j'utilise pour correspondre ISBN 10 mais je ne peux pas trouver celui qui est compatible pour MySQL REGEXP, quelqu'un peut-il m'aider à correspondre ISBN 10 en MySQL?regexp mysql fonction

J'ai essayé celui-ci (œuvres en PHP, mais pas dans MySQL)

"^(97(8|9))?\d{9}(\d|X)$" 

Voici quelques-unes des valeurs que je courais ce regex contre:

ISBN10: 0470945176 
by Paul D. Kimmel 
Publisher: John Wiley & Sons 
Copyright year: © 2011 

et

Thomas E. Creighton (Author) 
ISBN-10: 0471153028 
Publisher: Wiley-Interscience; 1 edition (April 8, 1999) 
2878 pages 
+0

@eggyal j'ai ajouté quelques valeurs que je suis en cours d'exécution contre – user1989379

Répondre

3

Le raccourci \d n'existe pas dans les expressions régulières MySQL. Utilisez plutôt la classe de caractères [[:digit:]]:

"^(97(8|9))?[[:digit:]]{9}([[:digit:]]|X)$" 

Voir sur sqlfiddle.

+0

bonne réponse et bon lien !!! – user1989379

+0

S'il existe un X de fin, il devrait être en majuscule. Donc si vous utilisez cette expression rationnelle, utilisez 'REGEXP BINARY"^(97 (8 | 9))? [[: Digit:]] {9} ([[: digit:]] | X) $ "' pour que la vérification sensible aux majuscules et minuscules. – fooquency

+0

L'ensemble peut également être abrégé en '^ (97 [89])? [0-9] {9} [0-9X] $'. – eggyal