2011-06-14 13 views
13

Cómo comprobar si una cadena contiene caracteres especiales en ruby. Si obtengo una expresión regular también está bien.Cómo comprobar que la cadena contiene caracteres especiales en ruby ​​

Por favor, hágamelo saber

+0

Qué caracteres no se tiene en cuenta 'especial'? – Ant

+1

Además, debe aceptar las respuestas a sus preguntas si las ha encontrado útiles (Vea que hay un tic) y también use votos ascendentes. Le ayudará a obtener más respuestas – Rishabh

+1

Estos son todos los caracteres especiales? <> ',? []} {= -) (* & ^% $ # '~ {} –

Respuesta

15
special = "?<>',?[]}{=-)(*&^%$#`~{}" 
regex = /[#{special.gsub(/./){|char| "\\#{char}"}}]/ 

A continuación, puede utilizar la expresión regular para comprobar si una cadena contiene el carácter especial:

if some_string =~ regex 

Esto parece un poco complicada: lo que está pasando en este bit

special.gsub(/./){|char| "\\#{char}" 

es convertir esto

"?<>',?[]}{=-)(*&^%$#`~{}" 

en esto:

"\\?\\<\\>\\'\\,\\?\\[\\]\\}\\{\\=\\-\\)\\(\\*\\&\\^\\%\\$\\#\\`\\~\\{\\}" 

¿Qué es todos los personajes en especial, escapó con un \ (que a su vez se escaparon en la cadena, es decir, no \\\). Esto se utiliza para construir una expresión regular como esto:

/[<every character in special, escaped>]/ 
21

Uso str.include?.

Devuelve true si str contiene la cadena o el carácter dados.

"hello".include? "lo" #=> true 
"hello".include? "ol" #=> false 
"hello".include? ?h  #=> true 
5
"foobar".include?('a') 
# => true 
3

Por qué no usar inversa de [:alnum:] POSIX.

Aquí [:alnum:] incluye todos los 0-9, a-z, A-Z.

Más información here.

+0

"Hel @ lo" .index (/ [^ [: alnum:]] /) Esto devolverá nulo en caso de que no tenga ningún carácter especial en su cadena y devolverá el índice de su primer personaje especial de lo contrario – Akshat

0
"[email protected]".index(/[^[:alnum:]]/) 

Esto devolverá nil en caso de que no tiene ningún carácter especial y, por tanto, forma eaiest creo.

1

¿Qué tal este comando en Ruby 2.0.0 y superior?

def check_for_a_special_charachter(string) 
    /\W/ === string 
end 

Por lo tanto, con:

!"[email protected]"[/\W/].nil? => True 

!"Hello"[/\W/].nil? => False 
Cuestiones relacionadas