2015-10-16 69 views
0

我在创建这个正则表达式来保存它之前过滤某些文本,我的想法是只保留字母,空格和带有口音或字母的字母,但最后两种情况都是作为重音 - 不工作,我希望你能帮助我。正则表达式字母,空格和重音

if(preg_match("/^[a-zA-Z .\-]+$/i", $field)){ 
    return true; 
}else{ 
    return false; 
} 
+0

添加它们(你需要音符的字母),以你的性格类,并使用u修饰符来处理UTF8字符串。 –

+0

当它是'[]'中的最后一个时,不需要转义破折号。如果使用'/ i',则不需要A-Z。所以你的正则表达式变成:'/^[a-z .-] + $/i' –

+1

@ Al.G .:不需要在字符类中逃避点。 –

回答

4

你想之前清空重音字符像/^[\pL\pM\p{Zs}.-]+$/u

解释新位:

  • \pL - 以Unicode字母分类
  • \pM匹配任何东西 - 结合标记(如结合附加符号)
  • \p{Zs} - 空格分隔
  • u - 模式和主题字符串被视为UTF-8

对于正则表达式,包括Unicode类别上Unicode的详细信息,请参阅http://www.regular-expressions.info/unicode.html

+0

谢谢!这对我来说,事实上我仍然有很多怀疑,即使正则表达式工作,所以你离开了我。谢谢! – NHTorres

0

您可以将重音的字符添加到您的情况:

if(preg_match("/^[A-Za-z\u00C0-\u017F\.\-]+$/i",  $field)){ 
     return true; 
    }else{ 
     return false; 
    } 

另一种方法是将字转换成Unicode刚你运行你的正则表达式功能

相关问题