2011-06-14 3 views
13

Comment vérifier si une chaîne contient un caractère spécial dans ruby. Si j'obtiens une expression régulière aussi c'est bien.Comment vérifier la chaîne contient un caractère spécial dans ruby ​​

S'il vous plaît laissez-moi savoir

+0

Quels caractères considérez-vous 'spécial'? – Ant

+1

En outre, vous devez accepter les réponses à vos questions si vous les avez trouvées utiles (voir la section correspondante) et utiliser également les upvotes. Cela vous aidera à obtenir plus de réponses – Rishabh

+1

Ce sont tous des caractères spéciaux? <> ',? []} {= -) (* & ^% $ # '~ {} –

Répondre

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

Vous pouvez ensuite utiliser l'expression rationnelle pour tester si une chaîne contient le caractère spécial:

if some_string =~ regex 

Cela semble un peu compliqué: ce qui se passe dans ce bit

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

est de tourner ceci

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

dans ce:

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

Ce qui est tout caractère spécial, se sont échappés avec un \ (qui est lui-même se sont échappés dans la chaîne, à savoir \\ pas \). Il est ensuite utilisé pour construire un masque comme celui-ci:

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

Utilisez str.include?.

Renvoie true si str contient la chaîne ou le caractère donné.

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

Pourquoi ne pas utiliser inverse de [:alnum:] posix.

Ici [:alnum:] inclut tous 0-9, a-z, A-Z.

En savoir plus here.

+0

"Hel @ lo" .index (/ [^ [: alnum:]] /) Ceci renverra zéro si vous n'avez aucun caractère spécial dans votre chaîne et retournera l'index de votre premier caractère spécial sinon – Akshat

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

Cela renverra nil au cas où vous n'avez pas un caractère spécial et donc eaiest façon de penser.

1

Que diriez-vous de cette commande dans Ruby 2.0.0 et au-dessus?

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

Par conséquent, avec:

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

!"Hello"[/\W/].nil? => False 
Questions connexes