2010-09-29 14 views
6

Cómo escribir expresiones regulares para que coincidan nombres como 'José' en postgres ... En otras palabras, necesito configurar una restricción para verificar que solo se ingresen nombres válidos, pero también quiero permitir caracteres unicode.expresión regular internacionalizada en postgresql

Regular expressions, unicode style tienen alguna referencia al respecto. Pero, parece que no puedo escribirlo en postgres.

Si no es posible escribir una expresión regular para esto, ¿será suficiente para comprobar sólo en el lado del cliente usando JavaScript

Respuesta

3

PostgreSQL no es compatible con clases de personajes basados ​​en la base de datos de caracteres Unicode, como .NET hace. Obtiene la clase de caracteres más estándar [[:alpha:]], pero esto depende de la configuración regional y probablemente no lo cubra.

Es posible que pueda salirse con la lista negra de los caracteres ASCII que no desea, y permitir todos los caracteres que no sean ASCII. por ejemplo, algo así como

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

(JavaScript no tiene clases de caracteres no ASCII o bien O incluso [[:alpha:]]..)

Por ejemplo, dada v_text como una variable de texto que se sanitzed:

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

Esa expresión regular no permitirá el carácter ''', que es bastante común en los nombres. –

+0

Esto sigue siendo cierto a partir de la Pg 9.3, pero si está leyendo esto y está utilizando una versión más nueva, consulte el manual. Puede cambiar en el futuro. –