Ruby on rails RubyonRails:Regex是否包含重音字符和特殊字符?
在我的rails应用程序中,我想使用一个正则表达式来接受重音字符(éçá,…)和特殊字符(&()“,…),现在这是我的定义Ruby on rails RubyonRails:Regex是否包含重音字符和特殊字符?,ruby-on-rails,ruby,regex,ruby-on-rails-4,Ruby On Rails,Ruby,Regex,Ruby On Rails 4,在我的rails应用程序中,我想使用一个正则表达式来接受重音字符(éçá,…)和特殊字符(&()“,…),现在这是我的定义 validates_format_of :job_title, :with => /[a-zA-Z0-9]/, :message => "le titre de l'offre n'est pas valide", :mul
validates_format_of :job_title,
:with => /[a-zA-Z0-9]/,
:message => "le titre de l'offre n'est pas valide",
:multiline => true
我还希望正则表达式不接受非拉丁字符,如阿拉伯语、汉语、用于字母数字字符:
validates_format_of :job_title,
:with => /[[:alnum:]]/,
:message => "le titre de l'offre n'est pas valide",
:multiline => true
一个简单的选项是将所有要接受的字符列为白名单。例如:
/[a-zA-Z0-9áéíóúÁÉÍÓÚÑñ&*]/
您可以使用\w
代替a-zA-Z0-9
。它表示任何单词字符(字母、数字、下划线)
对于拉丁字符,您可以使用。您必须确保首先输入,因为分解的字符串不匹配(即,包含使用组合字符的字符的字符串)。此外,这也不匹配类似
x́
(即x
,然后是组合尖锐重音
)因为它不会组成一个单独的角色,但这可能没关系,因为它不太可能被任何人实际使用
对于“特殊字符”,你确实需要更具体地说明你想要什么。你说你想允许“
和”
(所谓的“直接”引号),但是“
,,,”
和”
(“排版”或“卷曲”引号)呢。既然您允许使用欧洲语言,那么«
,»
,和
呢?您可以使用\p{Punct}
类,该类应该匹配所有这些,并且需要确定它是否匹配太多
您可能还希望匹配空格。只有空格字符可以吗?制表符、不间断空格、换行符等呢\p{Space}
应该得到它们
您可能需要匹配其他字符,但这些字符无法识别,例如,当前符号,也可能需要添加这些字符
因此,第一次尝试正则表达式时可能是这样的(我添加了\a
和\z
来锚定开始和结束,以及*
来匹配所有字符–我认为您需要它们):
将这些特殊字符放入正则表达式中。像«、»或»这样的内容可以接受吗?任意限制字符会惹恼很多人,特别是当你不小心忘记了他们需要使用的重音字符时。在这种情况下,阿拉伯文、中文和其他字符将被接受。这并不是一个详尽的列表。你还需要包括几十种其他类型,比如“a”单独的“a”,以及像ç、ø或ß这样的可能符合条件的其他类型。老实说,列出可接受的ASCII字符可能比列出非ASCII字符更容易,对吗?☃
/[\wáéíóúÁÉÍÓÚÑñ&*]/
/\A[\p{Latin}\p{Punct}\p{Space}0-9]*\z/