如何在使用正则表达式时处理波兰语字符?

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

我的街道名称为

KRZYWOŃ ANIELI
,那么我的正则表达式应该是什么来允许这种表达。目前我有一个简单的使用
/^[a-zA-Z ]+$/

请多多指教。

php regex unicode
5个回答
19
投票

使用

/^[\s\p{L}]+$/u
(PHP 语法)。

编辑:调整正则表达式以更好地处理空格。


8
投票

\p{L} 不仅可以捕获波兰语字母,还可以捕获俄语字母,例如,也可能是其他字母。

如果您像我一样,只需要波兰语字母,请拿这个:

[AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż]

角色来自wiki


5
投票

我用过:

[UserName=[A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ]* [A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ]*\]

名字和姓氏。


0
投票

使用统一码。看这里unicode正则表达式


0
投票

@Brock Adams' 解决方案相反,我建议使用(这将使您省略例如俄语字符):

/^[\s\p{Latin}]+$/u

而不是:

/^[\s\p{L}]+$/u

一般来说,有了这个,你大部分时间都可以省略使用解决方案的情况,例如(@Yuri Gor建议):

[AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż]

当然可以毫无问题地工作(对于波兰字符)。

这在Unicode正则表达式中有很好的描述,特别是在Unicode脚本部分。同样重要的是,如 PHP 提供三组正则表达式函数 - preg 函数集部分,如果您想将其与 PHP 一起使用:

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

如果您知道您想在代码中使用哪些字符范围,您也可以使用 Unicode 块,并记住:

并非所有 Unicode 正则表达式引擎都使用相同的语法来匹配 Unicode 块。

但请记住,没有 100% 有效的解决方案。一切都应该单独准备。

© www.soinside.com 2019 - 2024. All rights reserved.