轨道上的拼音:正则表达式包括重音字符和特殊字符



在我的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 COMBINING ACUTE ACCENT)之类的东西,因为它不会组成一个角色,但这可能没关系,因为它不太可能被任何人实际使用。

对于"特殊字符",您确实需要更具体地说明您想要什么。你说你想允许"'(所谓的"直"引号),但是("印刷"或"卷曲"引号)呢?既然你允许欧洲语言,那么«»呢?您可以使用 p{Punct} 类,它应该匹配所有这些以及更多,您需要确定它是否匹配太多。

您可能还希望匹配空格。只是空格字符可以吗?制表符、不间断空格、换行符等呢? p{Space}应该得到它们。

您可能需要匹配其他字符,这些字符

不会拾取,例如当前符号,可能也需要添加这些字符。

因此,第一次尝试您的正则表达式可能如下所示(我添加了 Az 来锚定开头和结尾,以及*来匹配所有字符 - 我认为您将需要它们):

/A[p{Latin}p{Punct}p{Space}0-9]*z/

一个简单的选项是将您要接受的所有字符列入白名单。例如:

/[a-zA-Z0-9áéíóúÁÉÍÓÚÑñ&*]/

您可以使用w代替a-zA-Z0-9。它表示任何单词字符(字母、数字、下划线)。

/[wáéíóúÁÉÍÓÚÑñ&*]/

最新更新