У меня есть модель под названием 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
?
Это не красиво, но должно работать даже с самым простым ароматом регулярного выражения. Сделайте 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]
.
Надеюсь, это сработает для вас.
Привет
Edit: Возможно даже, что группы, не содержащие захват, не поддерживаются, поэтому замените их на обычную группу захвата:
^([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])$
WHERE col REGEXP '^[0-9]{9}$ AND col <> '000000000'
^[0-9]{9}$ AND col <> 000000000
в базе данных? или изменить запрос следующим образом. Я не понял тебя. В моем случае col - это динамическое значение. Это один из аргументов в моей области. Это будет варьироваться при каждом вызове. Поэтому я не думаю, что это сработает для меня.