【发布时间】:2010-05-02 22:49:32
【问题描述】:
因此,如果字符串不仅包含所有欧洲和东方字母的字母以及“”(空格)和“-”减号,我需要获取值 false 或 true。如何用一些 $a 字符串做这样的事情?
【问题讨论】:
-
您认为“所有欧洲和东方字母的字母”是什么?
-
我猜是拉丁字母和西里尔字母。
标签: php regex string validation
因此,如果字符串不仅包含所有欧洲和东方字母的字母以及“”(空格)和“-”减号,我需要获取值 false 或 true。如何用一些 $a 字符串做这样的事情?
【问题讨论】:
标签: php regex string validation
试试这个:
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&} 仅匹配来自字母脚本(拉丁文、希腊文、西里尔文、泰文等)的字母
【讨论】:
以下是regular-expressions.info 对 Unicode 和 PHP 的看法:
最重要的正则表达式函数集以
preg开头。这些函数是 PCRE 库(Perl 兼容的正则表达式)的 PHP 包装器。 本网站正则表达式教程中有关 PCRE 正则表达式风格的任何内容都适用于 PHP 的preg函数。对于所有使用正则表达式的新 PHP 代码,您应该使用preg函数。一个特殊的选项是
/u,它打开Unicode 匹配模式,而不是默认的8 位匹配模式。您应该为使用\x{FFFF}、\X或\p{L}匹配Unicode 字符、字素、属性或脚本 的正则表达式指定/u。 PHP 会将'/regex/u'解释为 UTF-8 字符串而不是 ASCII 字符串。
Unicode 标准将每个分配的代码点(字符)放入一个脚本。脚本是特定人类书写系统使用的一组代码点。一些像泰语这样的脚本对应于一种人类语言。拉丁文等其他脚本跨越多种语言。
现在很少有正则表达式引擎支持 Unicode 脚本。在本教程中讨论的所有风格中,只有 JGsoft 引擎、Perl 和 PCRE 可以匹配 Unicode 脚本。以下是所有 Unicode 脚本的完整列表:
\p{Cyrillic}- [...省略其余部分]
因此,如果您想查看一个字符串是否仅由 PHP 中的 Cyrillic 字母组成,您可以尝试将其与以下正则表达式进行匹配:
/^\p{Cyrillic}*$/u
【讨论】:
听起来您以错误的方式处理字符集问题,但我可能是错的......?过去让我绊倒的一些问题..
代码应该实现什么?如果我们可以将您的问题转至下一步,也许会有更好的解决方案。
【讨论】:
预赛是一种简单的方法。您只需要添加以下条件。
如果 $name 只包含字母和空格,则返回 true,否则返回 false。
if (preg_match("/^[a-zA-Z\s]+$/", $name)) {
return true;
} else {
return false;
}
希望对你有帮助!
【讨论】: