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'(小写和大写在此不再相关)