ruby-on-rails – 在Active Record回调中验证日语字符

我有一个需要验证半宽和全宽日文字符的日文项目,半宽度允许14个字符,全宽度允许7个字符.

有没有人知道如何实现它?

现在我的模特

class Customer
   validates_length_of :name,:maximum => 14
end

不是一个好选择

我目前正在使用ror 2.3.5
可以使用全宽和半宽

解决方法

以下代码可能会让您超越线路,以满足您在最短时间内指定的确切要求.它使用 Moji gem( Japanese documentation),它在确定日语字符串的内容时提供了许多便利方法.

它在一个名称中最多只能识别14个字符,只包含半角字符,最多只能识别7个字符(包括包含半角和全角字符组合的名称,即存在一个完整字符)字符串中的-width字符将使整个字符串被视为“全宽”.

class Customer 

  validates_length_of :name,:maximum => 14,:if => Proc.new { |customer| half_width?(customer.name) }
  validates_length_of :name,:maximum => 7
    :unless => Proc.new { |customer| half_width?(customer.name) }

  def half_width?(string)
    Moji.type?(string,Moji::HAN_KATA)
  end

end

做出的假设:

>系统内的数据编码为UTF-8,并在数据库中存储;任何进一步必要的重新编码(例如将数据传递到遗留系统等)在另一个模块中完成.
>在将数据保存到数据库之前不会自动转换半到全角字符,即数据库中允许使用半角字符,原因可能是遗留系统集成,正确保存实际用户输入(!)和/或半角字符的美学价值(!)
>半角字符中的变音符号被视为它们自己的单独字符(即,为了确定字符串长度,不将カ和pars解析为一个字符)
>您指定的名称字段只有一个,而不是,例如,四个(姓氏,姓氏furigana,名称,名称furigana),这在当今很常见.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...