因此,如果字符串不仅包含所有欧洲字母和东字母的字母以及“”(空格)和“ - ”减号,那么我需要获取值false或true。如何用一些字符串做这样的事情?
答案 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主题的内容:
最重要的正则表达式函数集以
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标准将每个指定的代码点(字符)放入一个脚本。脚本是特定人类书写系统使用的一组代码点。像Thai这样的一些脚本对应一种人类语言。拉丁语等其他脚本跨越多种语言。
目前很少有正则表达式引擎支持Unicode脚本。在本教程中讨论的所有风格中,只有JGsoft引擎,Perl和 PCRE可以匹配Unicode脚本。以下是所有Unicode脚本的完整列表:
\p{Cyrillic}
- [...其余省略]
因此,如果您想查看字符串是否包含PHP中西里尔字母的仅字母,您可以尝试将其与此正则表达式匹配:
/^\p{Cyrillic}*$/u
答案 2 :(得分:1)
听起来你正在以错误的方式处理字符集问题,但我可能错了......?过去曾让我绊倒的一些陷阱......
代码应该达到什么目的?也许如果我们可以将您的问题看到下一步,那么就有更好的解决方案。