這裏是一個解決方案:
覆蓋使用您定義的模型將工作正則表達式解析方法getter方法。所以,現在如果你通過像/ \ d + /這樣的UI輸入正則表達式,它將會序列化爲「/ \\ d + /」以存儲在數據庫中。但是,當你調用user.regex的實例時,它將被解析成一個可以調用匹配的Regexp對象。
例子:
u = User.create(regex: "/\\d+/")
u.regex => /\d+/
u.regex.class => Regexp
u.regex.match("12345") => #<MatchData "12345">
u.regex.match("12345abc") => #<MatchData "12345">
型號:
class User < ActiveRecord::Base
def regex
parse_regex(self[:regex])
end
def parse_regex(string)
pieces = string.split("/")
pattern = pieces[1]
flags = pieces[2]
arg_two = 0
if flags.present?
flags.length.times do |i|
case flags[i, 1]
when "i"
arg_two |= Regexp::IGNORECASE
when "m"
arg_two |= Regexp::MULTILINE
when "x"
arg_two |= Regexp::EXTENDED
end
end
end
Regexp.new(pattern, arg_two)
end
end
控制器:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params).save
end
private
def user_params
params.require(:user).permit(:regex)
end
end
查看:
<%= form_for @user do |f| %>
<%= f.label :regex %>
<%= f.text_field :regex %>
<%= f.submit %>
<% end %>
那麼,它可能是我的下一個問題。但目前我在控制器級別遇到問題。當我的視圖發送更新請求時,它假定text_field內容是一個字符串,這意味着它會取出所有「危險」符號,如反斜槓,引號等,並將/ \ d + \「/更改爲」\\ d + \\\ 「」。所以我想知道如何解決它? –
@MikhailChuprynski我已經編輯了我的答案,希望您的滿意。 – mpiccolo