Rails4:模型验证 slug 列的 "format with" 正则表达式
Rails4 : model validates "format with" regex for slug column
我的模型有带有友好 ID gem 的 slug,有时用户只输入数字 slug 并且访问页面时出现问题。
然后我想更改除 only-digit 和一些特殊字符之外的模型验证。
这是当前模型验证
validates :slug, presence: true, length: { maximum: 200 }, uniqueness: true,
format: {with: /\A[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\/<>?,]+\z/, message: :invalid_slug}
这里怎么添加??
示例:
当前:
'123' => valid
'abc' => valid
'adb?&' => invalid
新:
'123' => invalid
'abc' => valid
'adb?&' => invalid
干杯
当前正则表达式:
/\A[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\/<>?,]+\z/
匹配任何仅包含 1+ 个符号的字符串,而不是 否定字符 class [^...]
中指定的符号。因此,由于没有数字,因此字符串中允许有数字,并且可以有 1+ 个数字,并且正则表达式将匹配那个只有数字的 slug。
要限制此模式以排除匹配的仅限数字的 slug,只需在 \A
锚点之后添加一个 (?!\d+\z)
前瞻:
/\A(?!\d+\z)[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\/<>?,]+\z/
^^^^^^^^^
参见regex demo(多行,因此,使用^
/ $
锚点,您需要在ROR中使用\A
和\z
)
此前瞻将在字符串的开头执行一次,并且当它断言(=匹配)仅数字(1 或更多)到字符串结尾时,它将 return 为 false。
我的模型有带有友好 ID gem 的 slug,有时用户只输入数字 slug 并且访问页面时出现问题。 然后我想更改除 only-digit 和一些特殊字符之外的模型验证。
这是当前模型验证
validates :slug, presence: true, length: { maximum: 200 }, uniqueness: true,
format: {with: /\A[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\/<>?,]+\z/, message: :invalid_slug}
这里怎么添加??
示例:
当前:
'123' => valid
'abc' => valid
'adb?&' => invalid
新:
'123' => invalid
'abc' => valid
'adb?&' => invalid
干杯
当前正则表达式:
/\A[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\/<>?,]+\z/
匹配任何仅包含 1+ 个符号的字符串,而不是 否定字符 class [^...]
中指定的符号。因此,由于没有数字,因此字符串中允许有数字,并且可以有 1+ 个数字,并且正则表达式将匹配那个只有数字的 slug。
要限制此模式以排除匹配的仅限数字的 slug,只需在 \A
锚点之后添加一个 (?!\d+\z)
前瞻:
/\A(?!\d+\z)[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\/<>?,]+\z/
^^^^^^^^^
参见regex demo(多行,因此,使用^
/ $
锚点,您需要在ROR中使用\A
和\z
)
此前瞻将在字符串的开头执行一次,并且当它断言(=匹配)仅数字(1 或更多)到字符串结尾时,它将 return 为 false。