Php 将正则表达式转换为国际字符的帐户
我目前有以下正则表达式,用于在表单中输入Php 将正则表达式转换为国际字符的帐户,php,regex,internationalization,Php,Regex,Internationalization,我目前有以下正则表达式,用于在表单中输入公司名称时进行验证: $regexpRange = $min.','.$max; $regexpPattern = '/^(?=[A-Za-z\d\'\s\,\.]{'.$regexpRange.'}$)(?=.*[a-z\d])[a-zA-Z\d]+[A-Za-z\d\'\s\,\.]+$/m'; 我需要更新这个国际标准,以允许国际字符我对此没有任何经验 有人能帮助我理解如何解决这个问题吗?以下是所需的步骤: 使用u模式选项。这将打开PCRE\u U
公司名称时进行验证:
$regexpRange = $min.','.$max;
$regexpPattern = '/^(?=[A-Za-z\d\'\s\,\.]{'.$regexpRange.'}$)(?=.*[a-z\d])[a-zA-Z\d]+[A-Za-z\d\'\s\,\.]+$/m';
我需要更新这个国际标准,以允许国际字符我对此没有任何经验
有人能帮助我理解如何解决这个问题吗?以下是所需的步骤:
- 使用
u
模式选项。这将打开PCRE\u UTF8
和PCRE\u UCP
(PHP文档忘记提到这个):
PCRE\u UTF8
此选项使PCRE将模式和主题视为UTF-8字符的字符串,而不是单字节字符串。但是,只有当PCRE构建为包含UTF支持时,它才可用。否则,使用此选项会引发错误。有关此选项如何更改PCRE行为的详细信息,请参见pcreunicode页面
PCRE\U UCP
此选项更改PCRE处理\B
,\B
,\D
,\D
,\S
,\S
,\W
,\W
,以及某些POSIX字符类的方式。默认情况下,仅识别ASCII字符,但如果设置了PCRE_UCP,则使用Unicode属性对字符进行分类。pcrepattern页面中有关泛型字符类型的部分提供了更多详细信息。如果设置PCRE_UCP,则匹配其影响的某个项目需要更长的时间。只有使用Unicode属性支持编译PCRE时,此选项才可用
\d
与PCRE\u UCP
配合很好(它已经相当于\p{N}
),但您必须替换这些[a-z]
范围以考虑重音字符:
- 将
[a-zA-Z]
替换为\p{L}
- 将
[a-z]
替换为\p{Ll}
- 将
[A-Z]
替换为\p{Lu}
\p{X}
表示:X中的字符,其中L
表示字母,Ll
表示小写字母,Lu
表示大写字母。您可以从中获取列表
注意,您可以在字符类中使用\p{X}
:例如[\p{L}\d\s]
- 并确保在PHP中对字符串使用UTF8编码。另外,请确保使用支持Unicode的函数来处理这些字符串
很快,我将编写$p='~\A\p{Xan}[\p{Xan}\s\',.]{.($min-1)。,'.($max-1)。'}\z~u'代码>(小写和大写在此不再相关)