【问题标题】:How my form_tag in ruby can accept my def REGEX (in application helper)?我在 ruby​​ 中的 form_tag 如何接受我的 def REGEX(在应用程序助手中)?
【发布时间】:2019-07-10 13:19:53
【问题描述】:

我的页面中有一个电子邮件搜索栏。当我将+ 字符放入我的text_field 时,找不到电子邮件。

例如,搜索test123@gmail.com 有效,但搜索test+123@gmail.com 无效。

我的表单代码:

<%= form_tag users_path, :method => 'get', local: true, class: 'ui form' do %>
  <div class="fields">
    <div class="field">
      <%= label_tag "Search by email:" %>
      <%= text_field_tag :search, params[:search] %>
    </div>
    <div id="search-bar-button-users", class="field">
      <button class="ui labeled icon button">
        <i class="search icon"></i>
          Search
        </button>
      </div>
    </div>
  </div>
<% end %> 

我的应用程序助手:

def is_a_valid_email?(email)
  (email =~ /^(([A-Za-z0-9]*\.+*_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\+)|([A-Za-z0-9]+\+))*[A-Z‌​a-z0-9]+@{1}((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,4}$/i)
end 

我希望搜索栏忽略 + 并仍然找到电子邮件。

【问题讨论】:

  • 试试这个:email =~ /^(([A-Za-z0-9]*\.+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\+)|([A-Za-z0-9]+\+))*[A-Z‌​a-z0-9]+@{1}((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,4}$/i
  • 谢谢,但我需要将代码放入我的 form_tag 中,不是吗?实际上我认为 def 没有链接到我的 form_tag 搜索字段?
  • hackernoon.com/… 读起来很有趣。

标签: regex ruby ruby-on-rails-5


【解决方案1】:

直接在 Rails 中工作的最简单方法是在搜索之前更正电子邮件。

在你的控制器中

def correct_email(email)
  email.gsub(/[^0-9A-Za-z@.]/, '') # only keep 0-9 , A-Z, a-z, '.' and '@'
end

然后

User.where(email: correct_email(params[:search]))

【讨论】:

  • 谢谢,但在您的帮助下,我只能验证电子邮件。我只想在发送搜索时“绕过”“+”字符
  • 不仅仅是验证。假设您的数据库中有电子邮件test123@gmail.com。您通过test+123@gmail.com 作为搜索参数,使用User.where(email: correct_email(params[:search])) 可以找到您的电子邮件@AwsmDev
  • 感谢您的帮助,但我在哪里可以插入“用户在哪里”?我必须将它插入这一行? ""
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
相关资源
最近更新 更多