Можете ли вы использовать `include?` В более чем выражениях?

Я пытаюсь выяснить, содержит ли строка более двух вхождений определенного символа. Например,

is_valid_email("joey@[email protected]")

должен возвращать false, если имеется более двух "@" или ".". Могу я использовать что-то подобное?

if string.include?("@") > 2
  return false
else
  return true
end

Что возвращает String#include?? Если это не число, то нет, вы не можете этого сделать. Но есть и другие методы.

Sergio Tulentsev 17.12.2018 16:11

Как уже указывалось, вы можете использовать count для решения своей непосредственной проблемы. Но на самом деле вам нужно что-то более надежное для проверки электронной почты. Все не так просто. Вам нужно будет использовать регулярное выражение.

Sagar Pandya 17.12.2018 16:16

Насколько я понимаю, это просто пример, над которым я работаю, и хотел узнать, есть ли способ проверить одинаковые типы символов в строке.

TarenDay 17.12.2018 16:21

Кстати, ваш примерный адрес joey@[email protected] не содержит более, чем 2 символа @, он содержит точно 2. Вероятно, вам нужен >= 2. Что касается . - вполне нормально, если адреса электронной почты содержат несколько точек, например [email protected]

Stefan 17.12.2018 17:52

Для тестирования адресов электронной почты вам, вероятно, понадобится свободный валидатор в стиле RFC822.

tadman 17.12.2018 18:21

Попробуйте добавить вопросительный знак к имени метода (is_email_address?). Лучше, пожалуй: valid_email_address?

Cary Swoveland 17.12.2018 18:55
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
6
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать String#count. Кроме того, нет особого смысла в выражении if, которое просто возвращает true или false; само логическое условие уже является true или false, поэтому вы можете просто вернуть его напрямую. В этом случае, поскольку часть if возвращает false, а else возвращает true, вы можете отрицать условие:

return !(string.count('@') >= 2)

Или используйте противоположное условие:

return string.count('@') < 2

Но если вы проверяете, что строка выглядит как адрес электронной почты, похоже, вы захотите убедиться, что она содержит ровно один «@»:

return string.count('@') == 1

Вы можете оставить ключевое слово return отключенным, если после этой проверки в теле метода не будет дополнительного кода; метод автоматически возвращает значение своего последнего выражения.

Другие вопросы по теме