在我的rails应用程序中,我想使用一个接受重音字符(é ç à,...)和特殊字符(&()"' , ...)的正则表达式,现在这是我的vlidation
validates_format_of :job_title,
:with => /[a-zA-Z0-9]/,
:message => "le titre de l'offre n'est pas valide",
:multiline => true
我还希望正则表达式不接受非拉丁字符,如阿拉伯语、中文......
对字母数字字符使用 [:alnum:]
:
validates_format_of :job_title,
:with => /[[:alnum:]]/,
:message => "le titre de l'offre n'est pas valide",
:multiline => true
对于拉丁字符,可以使用 p{Latin}
脚本字符属性。您必须确保首先规范化输入,因为分解的字符串不匹配(即包含使用组合字符的字符的字符串)。这也不符合x́
(后跟x
COMBINING ACUTE ACCENT
)之类的东西,因为它不会组成一个角色,但这可能没关系,因为它不太可能被任何人实际使用。
对于"特殊字符",您确实需要更具体地说明您想要什么。你说你想允许"
和'
(所谓的"直"引号),但是“
、”
、‘
和’
("印刷"或"卷曲"引号)呢?既然你允许欧洲语言,那么«
、»
、‹
、›
和„
呢?您可以使用 p{Punct}
类,它应该匹配所有这些以及更多,您需要确定它是否匹配太多。
您可能还希望匹配空格。只是空格字符可以吗?制表符、不间断空格、换行符等呢? p{Space}
应该得到它们。
不会拾取,例如当前符号,可能也需要添加这些字符。
因此,第一次尝试您的正则表达式可能如下所示(我添加了 A
和 z
来锚定开头和结尾,以及*
来匹配所有字符 - 我认为您将需要它们):
/A[p{Latin}p{Punct}p{Space}0-9]*z/
一个简单的选项是将您要接受的所有字符列入白名单。例如:
/[a-zA-Z0-9áéíóúÁÉÍÓÚÑñ&*]/
您可以使用w
代替a-zA-Z0-9
。它表示任何单词字符(字母、数字、下划线)。
/[wáéíóúÁÉÍÓÚÑñ&*]/