【发布时间】:2021-10-09 16:28:16
【问题描述】:
数据库保存输入表单中的 HTML 标记,我想剥离它们以进行正确的验证。我在 IRB 中测试了以下方法,它似乎工作正常。但是我不知道如何使用此方法进行验证。
这是我模型中的代码:
class Task < ActiveRecord::Base
validates strip_tag(:text), length: {minimum: 3}, uniqueness: true
def strip_tag(record)
record.split(/\<.*?\>/).map(&:strip).reject(&:empty?).join(' ').gsub(/\s,/,',')
end
end
我面临的问题是正在检查唯一性和长度是否大于 3,但是由于 HTML 标记,例如很容易创建重复项。
删除标签后重复的示例:
"<p><span style=\"color: #1d3d70; font-family: -apple-system, system-ui, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: #ffffff;\">Testing 8449</span></p>"
还有这个:
"<p>Testing 8449</p>"
删除 HTML 标记后两者应该具有相同的值,例如,我想防止这种重复。
【问题讨论】:
-
为什么不用
ActionView::Helpers::SanitizeHelper#strip_tags而不是重新发明轮子? -
strip_tags是要走的路。但是,您必须在该字段中存储 HTML 标记是否有商业原因?以这种方式验证独特性可能会在未来造成痛苦和折磨。另一种方法是将strip_tags的结果存储在另一个字段中,然后在该字段上执行验证。 -
我将改用trip_tag。 @ryan 我正在存储标签,因为用户想要丰富的格式文本。他们可以更改字体、创建表格、插入超链接、使用段落等......就像他们在 Word 中所做的一样
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-5