Как проверить строку содержит специальный символ в рубине
Как проверить, содержит ли строка специальный символ в ruby. Если я получаю регулярное выражение, это также хорошо.
Пожалуйста, дайте мне знать
Ответы
Ответ 1
special = "?<>',?[]}{=-)(*&^%$#`~{}"
regex = /[#{special.gsub(/./){|char| "\\#{char}"}}]/
Затем вы можете использовать регулярное выражение для проверки, содержит ли строка специальный символ:
if some_string =~ regex
Это выглядит несколько сложнее: что происходит в этом бите
special.gsub(/./){|char| "\\#{char}"
- это
"?<>',?[]}{=-)(*&^%$#`~{}"
в это:
"\\?\\<\\>\\'\\,\\?\\[\\]\\}\\{\\=\\-\\)\\(\\*\\&\\^\\%\\$\\#\\`\\~\\{\\}"
Каждый символ в специальном, экранированный с помощью \
(который сам бежит в строке, т.е. \\
not \
). Затем он используется для создания регулярного выражения следующим образом:
/[<every character in special, escaped>]/
Ответ 2
Используйте str.include?
.
Возвращает true
, если str
содержит заданную строку или символ.
"hello".include? "lo" #=> true
"hello".include? "ol" #=> false
"hello".include? ?h #=> true
Ответ 3
"foobar".include?('a')
# => true
Ответ 4
Почему бы не использовать инверсию [:alnum:]
posix.
Здесь [:alnum:]
включает все 0-9
, a-z
, a-z
.
Подробнее здесь.
Ответ 5
Как насчет этой команды в Ruby 2.0.0 и выше?
def check_for_a_special_charachter(string)
/\W/ === string
end
Следовательно, при:
!"[email protected]"[/\W/].nil? => True
!"Hello"[/\W/].nil? => False
Ответ 6
"[email protected]".index( /[^[:alnum:]]/ )
Это вернет nil
, если у вас нет специального символа, и, следовательно, я думаю, что это возможно.