如何查找字符串是否包含字母和空格(php)?

时间:2010-05-02 22:49:32

标签: php regex string validation

因此,如果字符串不仅包含所有欧洲字母和东字母的字母以及“”(空格)和“ - ”减号,那么我需要获取值false或true。如何用一些字符串做这样的事情?

3 个答案:

答案 0 :(得分:3)

试试这个:

if (preg_match('/^[\p{L&} -]+$/u', $a)) {
  # Only letters (any script), spaces and hyphens
} else {
  # Emtpy string or other characters too
}

\p{L}匹配任何脚本中可以成为单词一部分的任何字符,包括表意文字(例如中文字符)。 \p{L&}仅匹配字母脚本(拉丁语,希腊语,西里尔语,泰语等)中的字母

答案 1 :(得分:2)

以下是regular-expressions.info关于Unicode和PHP主题的内容:

Regular expressions on PHP

  

最重要的正则表达式函数集以preg开头。这些函数是围绕PCRE库(Perl-Compatible Regular Expressions)的PHP包装器。 本网站正则表达式教程中有关PCRE正则表达式的任何内容都适用于PHP的preg函数。对于使用正则表达式的所有新PHP代码,您应该使用preg函数。

     

一个特殊选项是/u,它打开Unicode匹配模式,而不是默认的8位匹配模式。您应为使用/u\x{FFFF}\X的正则表达式指定\p{L}以匹配Unicode字符,字形,属性或脚本。 PHP会将'/regex/u'解释为UTF-8字符串而不是ASCII字符串。


Unicode support

  

Unicode标准将每个指定的代码点(字符)放入一个脚本。脚本是特定人类书写系统使用的一组代码点。像Thai这样的一些脚本对应一种人类语言。拉丁语等其他脚本跨越多种语言。

     

目前很少有正则表达式引擎支持Unicode脚本。在本教程中讨论的所有风格中,只有JGsoft引擎,Perl和 PCRE可以匹配Unicode脚本。以下是所有Unicode脚本的完整列表:

     
      
  • \p{Cyrillic}
  •   
  • [...其余省略]
  •   

因此,如果您想查看字符串是否包含PHP中西里尔字母的字母,您可以尝试将其与此正则表达式匹配:

/^\p{Cyrillic}*$/u

答案 2 :(得分:1)

听起来你正在以错误的方式处理字符集问题,但我可能错了......?过去曾让我绊倒的一些陷阱......

  • DOMDocument处理UTF8内部的所有内容,无论如何。
  • 包含在不同字符集中
  • 由于缺少“SET NAMES ..”指令,数据库无法以Unicode格式输出。

代码应该达到什么目的?也许如果我们可以将您的问题看到下一步,那么就有更好的解决方案。