2011-07-20 45 views
7

Estoy usando Ruby on Rails 3.0.9 y me gustaría validar una cadena que solo puede tener caracteres (no caracteres especiales, sin distinción de mayúsculas y minúsculas) , espacios en blanco y números.Regex para validar cadenas que tienen solo caracteres (no caracteres especiales), espacios en blanco y números

En mi código de validación que tienen:

validates :name, 
    :presence => true, 
    :format  => { :with => regex } # Here I should set the 'regex' 

Cómo debería indicar la expresión regular?

Respuesta

18

Hay varias maneras de hacerlo. Si sólo desea permitir que los caracteres de palabra ASCII (sin caracteres acentuados como el correo o letras de otros alfabetos como Ӕ o ל), utilizan este:

/^[a-zA-Z\d\s]*$/ 

Si desea permitir sólo números y letras de otros idiomas para ruby 1.8.7, utilice esto:

/^(?:[^\W_]|\s)*$/u 

Si desea permitir sólo números y letras de otros idiomas para ruby ​​1.9.x, utilice esto:

^[\p{Word}\w\s-]*$ 

Además, si usted está planeando utilizar expresiones regulares 1.9.x con soporte Unicode en Ruby on Rails, añada esta línea al principio de su archivo .rb:

# coding: utf-8 
+7

Asegúrese de probar su expresión regular en http://rubular.com. –

+0

@ ream88 - Gracias; editado para eliminar la versión '\ p {L}'. Fue descuidado por mi parte no comprobar con una expresión regular tan corta. El '\ p {L}' no funciona, ¿por qué? ¿No es compatible con Ruby regex? Funciona bien en .NET. –

+1

@Justin Morgan - ¿Y qué hay de validar caracteres acentuados como à, è, é, ò, ... en la cuerda? – Backo

1

Usted está buscando:

[a-zA-Z0-9\s]+

El + dice uno o más por lo que no igualaremos cadena vacía. Si necesita combinarlos también, use * en lugar de +.

+0

O incluso más corto, [\ w \ s] + – eugen

+0

... suponiendo que los caracteres no ASCII no están permitidos .. –

+0

@eugen - Eso permitirá '_'. –

0

Además de lo que se ha dicho , asignar cualquiera de la expresion regular a la variable de expresiones regulares en su mando a esto, por ejemplo

regex = ^[a-zA-Z\d\s]*$ 
Cuestiones relacionadas