Expression Régulière

Oracle et les expressions régulières :

Vérification des caractères autorisés pour un nom et un prénom :

Chaîne de caractère alpha. Le tiret, l’apostrophe et l’espace sont autorisés.
L’espace et l’apostrophe ne peuvent être doublés (seul le double tiret est autorisé).
Le premier caractère doit être différent de tiret ou espace.
Le dernier caractère doit être différent de tiret.
Le tiret et l’espace ne peuvent être consécutifs.

La méthode : Je recherche a l’inverse ce que je ne veux pas. Ca me semble plus simple.

Chaîne de caractère. Le tiret, l’apostrophe et l’espace sont autorisés.
REGEXP_LIKE(‘DUGL9N’, ‘[^A-Z  »-]’)

L’espace et l’apostrophe ne peuvent être doublés (seul le double tiret est autorisé).
REGEXP_LIKE(‘DUGLON’, ‘|—| » »| |’)

Le premier caractère doit être différent de tiret ou espace.
REGEXP_LIKE(‘DUGLON’, ‘^[- ](*)’)

Le dernier caractère doit être différent de tiret.
REGEXP_LIKE(‘DUGLON’, ‘(*)[- ]$’)

Le tiret et l’espace ne peuvent être consécutifs.
REGEXP_LIKE(‘DUGLON’, ‘|  »| » |’)

Ce qui donne :
SELECT ‘ko’ from dual
WHERE REGEXP_LIKE(‘DUGL9N’, ‘^[- ](*)|—| | » »|  »| » |(*)[- ]$’)
or REGEXP_LIKE(‘DUGL9N’, ‘[^A-Z  »-]’)
;