用于排除数字或特殊字符的正则表达式

时间:2014-10-08 11:49:10

标签: ruby-on-rails ruby regex forms

我在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'}

2 个答案:

答案 0 :(得分:4)

您链接到州的文档:

  

注意:使用\ A和\ Z匹配字符串的开头和结尾,^和$匹配一行的开头/结尾。

由于您不需要对名称进行多行支持(即名称中的换行符应视为无效),您可以安全地将其更改为:

/\A([^\d\W]|[-])*\Z/

另请参阅this answer,其中更多地解释了安全风险。

答案 1 :(得分:1)

出于安全原因,您需要使用\A作为行首,使用\z作为行尾而不是^$。所以你的正则表达式应该是

/\A([^\d\W]|[-])*\z/