我在Rails中设置一个需要名字和姓氏的用户表单。我决定使用第3个来结束此Ruby doc的正则表达式,以确保它们不输入任何数字或特殊字符。不幸的是,当我返回表单时,我收到此错误:
提供的正则表达式使用多行锚点(^或$), 这可能会带来安全风险。你的意思是使用\ A和\ z,或 忘了添加:multiline =>真的选择?。
我刚刚开始学习RegEx,所以如果有更好的方法来编写此验证,我会全神贯顺。
代码:
validates :first_name, :last_name, length: {minimum: 2}, format: {with: /^([^\d\W]|[-])*$/, message: 'First Name/Last Name cannot have any numbers or special characters'}
答案 0 :(得分:4)
您链接到州的文档:
注意:使用\ A和\ Z匹配字符串的开头和结尾,^和$匹配一行的开头/结尾。
由于您不需要对名称进行多行支持(即名称中的换行符应视为无效),您可以安全地将其更改为:
/\A([^\d\W]|[-])*\Z/
另请参阅this answer,其中更多地解释了安全风险。
答案 1 :(得分:1)
出于安全原因,您需要使用\A
作为行首,使用\z
作为行尾而不是^
和$
。所以你的正则表达式应该是
/\A([^\d\W]|[-])*\z/