2010-09-29 4 views
6

Comment écrire des expressions régulières pour correspondre à des noms comme 'José' dans postgres .. En d'autres termes, je dois configurer une contrainte pour vérifier que seuls les noms valides sont entrés, mais aussi pour autoriser les caractères Unicode.expression régulière internationalisée dans postgresql

Regular expressions, unicode style avoir des références à ce sujet. Mais, il semble que je ne puisse pas l'écrire en postgres.

S'il est impossible d'écrire un regex pour cela, sera-il suffisant pour vérifier que le côté client en utilisant JavaScript

Répondre

3

PostgreSQL ne prend pas en charge les classes de caractères en fonction de la base de données de caractères Unicode comme ne .NET. Vous obtenez la classe de caractères [[:alpha:]] plus standard, mais cela dépend des paramètres régionaux et ne le couvrira probablement pas.

Vous pourrez peut-être vous contenter de mettre en liste noire les caractères ASCII que vous ne voulez pas, et d'autoriser tous les caractères non-ASCII. par exemple, quelque chose comme

[^\s!"#$%&'()*+,\-./:;<=>?\[\\\]^_`~]+ 

(JavaScript ne possède pas des classes de caractères non-ASCII soit ou même [[:alpha:]]..)

Par exemple, étant donné v_text comme une variable de texte à sanitzed:

-- Allow internationalized text characters and remove undesired characters 
v_text = regexp_replace(lower(trim(v_text)), '[!"#$%&()*+,./:;<=>?\[\\\]\^_\|~]+', '', 'g'); 
+2

Cette expression régulière interdira le caractère '' ', qui est assez commun dans les noms. –

+0

Cela reste vrai à partir de la page 9.3, mais si vous lisez ceci et utilisez une version plus récente, consultez le manuel. Cela pourrait changer dans le futur. –