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。