我正在尝试用 PHP 编写一个合理宽松的名称验证器,我的第一次尝试包括以下模式:// unicode 字母、撇号、连字符、空格$namePattern = \'/^([\\...
我正在尝试用 PHP 编写一个合理允许的名称验证器,我的第一次尝试包含以下模式:
// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";
这最终被传递给对 的调用 preg_match()
。据我所知,这适用于普通的 ASCII 字母表,但似乎会遇到更复杂的字符,如 Ă 或 。
模式本身有问题吗?也许我期望 \p{L}
做的工作比我想象的要多?
或者这是否与输入传递的方式有关?我不确定这是否相关,但我确实确保在表单页面上指定了 UTF8 编码。
如果你想用 Unicode 替换它, old pattern
这样 new pattern
写:
$text = preg_replace('/\bold pattern\b/u', 'new pattern', $text);
所以这里的关键是 u
修饰符
注意 :您的服务器 php version
至少应 PHP 4.3.5
如上所述 php.net | 模式修饰符
u (PCRE_UTF8) 此修饰符打开了与 Perl 不兼容的 PCRE 的附加功能。模式字符串被视为 UTF-8。此修饰符在 Unix 上从 PHP 4.1.0 或更高版本开始可用,在 win32 上从 PHP 4.2.3 开始可用。自 PHP 4.3.5 起,将检查模式的 UTF-8 有效性。
谢谢 AgreeOrNot
谁给我这个密钥 preg_replace 匹配阿拉伯语中的整个单词
我尝试了一下,它在本地主机上工作,但是当我在远程服务器上尝试它时它不起作用,然后我发现 php.net u
在 PHP 4.3.5 中启动使用修饰符。,我升级了 php 版本并且它工作了
重要的是要知道这种方法对阿拉伯语用户(عربي)非常有用,因为 - 正如我所相信的 - unicode 是阿拉伯语的最佳编码,如果不使用修饰符,替换将不起作用 u
,请参阅下一个示例,它应该适用于你
$text = preg_replace('/\bمرحبا بك\b/u', 'NEW', $text);