我以不同语言向我的可公开编辑的网站提交了大量提交内容,但我希望将其限制为仅限英文字符。有没有简单的方法来做到这一点?我是否应该使用正则表达式限制字符进行验证,或者该方法是否存在任何常见问题?
注意:文本不包含HTML或任何其他标记。它应该只是纯文本,可能有破折号,点等常见字符。
答案 0 :(得分:0)
validates :comment, format: { with: [a-zA-Z0-9\s]+, on: :create }
- 或其他行动
答案 1 :(得分:-1)
听起来您的问题可能是垃圾邮件,因此您可以使用更好的解决方案。如果是这样,请参阅本答案的结尾以获取详细信息。
我评论说,这取决于您要阻止哪种语言。十几种语言使用拉丁字符集,甚至更多使用拉丁字符集。英语也使用口音,例如naïve这个词。所以我建议你不要尝试这样做。
如果必须,并且您想要阻止非拉丁字符,则可以编写自定义验证器。
class LatinCharsetValidator < ActiveModel::EachValidator
# Regex taken from this answer http://stackoverflow.com/a/13671443/276959
LATIN_CHARSET_REGEX = /[\p{L}&&[^a-zA-Z]]/
def validate_each(object, attribute, value)
object.errors.add(attribute) if value =~ LATIN_CHARSET_REGEX
end
end
然后您可以在模型中调用此验证器:
class Comment < ActiveRecord::Base
validates :comment, latin_charset: true
end
这假设您的用户合法地尝试发表评论。如果没有,您可以使用正则表达式跳过评论创建,而不提供反馈。
但是,我相信这是一个坏主意。您无法控制人们最终在文本区域中写入或粘贴的内容,您最终可能会阻止合法评论。如果有人想在解释它时想要包含一个外来单词怎么办?最好礼貌地要求您的用户只用英语发表评论。但是,如果您的问题是垃圾邮件,则最好实施honeypot或其他类型的垃圾邮件防护。