Shrikanth Hathwar
Shrikanth Hathwar

Reputation: 1160

How to check string contains special character in ruby

How to check whether a string contains special character in ruby. If I get regular expression also it is fine.

Please let me know

Upvotes: 19

Views: 36985

Answers (7)

Max Williams
Max Williams

Reputation: 32933

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

You can then use the regex to test if a string contains the special character:

if some_string =~ regex

This looks a bit complicated: what's going on in this bit

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

is to turn this

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

into this:

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

Which is every character in special, escaped with a \ (which itself is escaped in the string, ie \\ not \). This is then used to build a regex like this:

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

Upvotes: 17

tony byamungu
tony byamungu

Reputation: 11

if you looking for a particular character, you can make a range of characters that you want to include and check if what you consider to be a special character is not part of that arsenal

puts String([*"a".."z"].join).include? "a"    #true
puts String([*"a".."z"].join).include? "$"    #false

I think this is flexible because here you are not limited as to what should be excluded

puts String([*"a".."z",*0..9,' '].join).include? " "   #true

Upvotes: -1

Nikesh
Nikesh

Reputation: 424

How about this command in Ruby 2.0.0 and above?

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

Therefore, with:

!"He@llo"[/\W/].nil?  => True

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

Upvotes: 2

Jakob S
Jakob S

Reputation: 20125

"foobar".include?('a')
# => true

Upvotes: 6

Rishabh
Rishabh

Reputation: 3852

Use str.include?.

Returns true if str contains the given string or character.

"hello".include? "lo"   #=> true
"hello".include? "ol"   #=> false
"hello".include? ?h     #=> true

Upvotes: 30

Akshat
Akshat

Reputation: 655

"Hel@lo".index( /[^[:alnum:]]/ )

This will return nil in case you do not have any special character and hence eaiest way I think.

Upvotes: 3

Akshat
Akshat

Reputation: 655

Why not use inverse of [:alnum:] posix.

Here [:alnum:] includes all 0-9, a-z, A-Z.

Read more here.

Upvotes: 3

Related Questions