红宝石中的form_tag如何接受我的def REGEX(在应用程序帮助程序中)?

时间:2019-07-10 13:19:53

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

我的页面上有一个电子邮件搜索栏。当我在+中放入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 %> 

我的ApplicationHelper:

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 

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

1 个答案:

答案 0 :(得分: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]))