首页 > 解决方案 > 我在 ruby​​ 中的 form_tag 如何接受我的 def REGEX(在应用程序助手中)?

问题描述

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

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

标签: regexrubyruby-on-rails-5

解决方案


直接在 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]))

推荐阅读