验证字符串是否仅包含字母和连字符的 Unicode 安全方法

问题描述 投票:0回答:2

我在一个法国网站上工作,我需要使用正则表达式才能在我的字段之一中包含在线信件(有些带有重音符号。)。

这就是我所做的。

if( !mb_eregi("^[a-zéèùêëîïôöçñ\-]+$", str_replace(" ", "", $prenom)) )

“测试”返回 FALSE

但是“tést”返回 TRUE!

如果 $prenom 设置为“tést”,则结果为 false,但我希望它是 false。怎么会呢?

php regex validation unicode multibyte
2个回答
1
投票

我将 preg_match 与 unicode 修饰符一起使用:

if( !preg_match('/^[\p{L}-]+$/u', str_replace(" ", "", $prenom)) )

0
投票

离M42解不远了,你可以避免使用

str_replace
和否定:

if (preg_match('/[^p{L} -]/u', $prenom)) { ... }

如果您只想处理法语字母:

if (preg_match('/[^a-zæœéèêëàâäôöîïùûüçÿ -]/ui', $prenom)) { ... }
© www.soinside.com 2019 - 2024. All rights reserved.