Я пытаюсь выяснить, содержит ли строка более двух вхождений определенного символа. Например,
is_valid_email("joey@[email protected]")
должен возвращать false
, если имеется более двух "@"
или "."
. Могу я использовать что-то подобное?
if string.include?("@") > 2
return false
else
return true
end
Как уже указывалось, вы можете использовать count
для решения своей непосредственной проблемы. Но на самом деле вам нужно что-то более надежное для проверки электронной почты. Все не так просто. Вам нужно будет использовать регулярное выражение.
Насколько я понимаю, это просто пример, над которым я работаю, и хотел узнать, есть ли способ проверить одинаковые типы символов в строке.
Кстати, ваш примерный адрес joey@[email protected]
не содержит более, чем 2 символа @
, он содержит точно 2. Вероятно, вам нужен >= 2
. Что касается .
- вполне нормально, если адреса электронной почты содержат несколько точек, например [email protected]
Для тестирования адресов электронной почты вам, вероятно, понадобится свободный валидатор в стиле RFC822.
Попробуйте добавить вопросительный знак к имени метода (is_email_address?
). Лучше, пожалуй: valid_email_address?
Вы можете использовать String#count
. Кроме того, нет особого смысла в выражении if
, которое просто возвращает true
или false
; само логическое условие уже является true
или false
, поэтому вы можете просто вернуть его напрямую. В этом случае, поскольку часть if
возвращает false
, а else
возвращает true
, вы можете отрицать условие:
return !(string.count('@') >= 2)
Или используйте противоположное условие:
return string.count('@') < 2
Но если вы проверяете, что строка выглядит как адрес электронной почты, похоже, вы захотите убедиться, что она содержит ровно один «@»:
return string.count('@') == 1
Вы можете оставить ключевое слово return
отключенным, если после этой проверки в теле метода не будет дополнительного кода; метод автоматически возвращает значение своего последнего выражения.
Что возвращает
String#include?
? Если это не число, то нет, вы не можете этого сделать. Но есть и другие методы.