我有一个名为Department的模型。
class Department < ActiveRecord::Base
# Associations
belongs_to :client
belongs_to :facility
scope :facility_departments, ->(facility_id) {
where("facility_id = ? ", facility_id)}
scope :matching_departments, ->(facility_id, identifier) {facility_departments(facility_id).where("
? REGEXP reg_exp ", identifier.to_s).order("weight DESC") }
end
facility_id
和一个正则表达式列。matching_departments
(见上文)。 那么department-1
表中departments
的正则表达式应该是什么?
我使用(^[0-9]{9,}$)
更新了它 - 将所有数字标识符与length 9
匹配。如何排除9 zeros
?
答案 0 :(得分:0)
它不是很漂亮,但应该使用最简单的正则表达式。进行9次单独测试,检查每个位置的非0位数:
^(?:[1-9]\d{8}|\d[1-9]\d{7}|\d{2}[1-9]\d{6}|\d{3}[1-9]\d{5}|\d{4}[1-9]\d{4}|\d{5}[1-9]\d{3}|\d{6}[1-9]\d{2}|\d{7}[1-9]\d|\d{8}[1-9])$
首先在第一个位置测试1-9,然后是8位数。接下来是数字,然后是1-9,接着是7位数字。等等...
如果您的正则表达式不支持数字字符类,请将\d
替换为[0-9]
。
希望这适合你。
此致
修改强> 甚至可能不支持非捕获组,因此将其替换为普通捕获组:
^([1-9][0-9]{8}|[0-9][1-9][0-9]{7}|[0-9]{2}[1-9][0-9]{6}|[0-9]{3}[1-9][0-9]{5}|[0-9]{4}[1-9][0-9]{4}|[0-9]{5}[1-9][0-9]{3}|[0-9]{6}[1-9][0-9]{2}|[0-9]{7}[1-9][0-9]|[0-9]{8}[1-9])$