if ( preg_match('(?<![äöüÄÖÜß\w])([äöüÄÖÜß\w]+)(?![äöüÄÖÜß\w])', $file_name )){
$file['error'] = __( "WARNING: Invalid file name. German umlauts are not allowed.", 'wp-file' );
}
所有其他元音**“e i o u”和“y”也处于相同的情况:有这两种方法来产生它们。 要处理这种情况,您可以简单地考虑模式中的两种可能性,但也可以使用Normalizer from the intl将字符串转换为NFC。 需要考虑的另一件事是,当您必须处理多字节字符时(在UTF-8中,重音字符就是这种情况),您需要通知regex引擎,否则它将逐个字节读取主题字符串和模式,而不是逐个码点读取。 考虑以下角色类:[ä](带有 “readymade” 小A,带分音符)。ä用UTF-8中的两个字节编码:C3 A4.这意味着默认情况下,如果在主题字符串中找到这两个字节中的一个,那么具有该字符类的模式将成功,但这并不意味着主题字符串包含ä**:
3条答案
按热度按时间b1zrtrql1#
使用UNICODE生成**“a with元音变音(或分音符)"**有两种方法:
ä
拉丁文小写字母A带横杠a
拉丁小写字母A),后跟U+0308̈
组合DIAERESIS所有其他元音**“e i o u”和“y”也处于相同的情况:有这两种方法来产生它们。
要处理这种情况,您可以简单地考虑模式中的两种可能性,但也可以使用Normalizer from the intl将字符串转换为NFC。
需要考虑的另一件事是,当您必须处理多字节字符时(在UTF-8中,重音字符就是这种情况),您需要通知regex引擎,否则它将逐个字节读取主题字符串和模式,而不是逐个码点读取。
考虑以下角色类:
[ä]
(带有 “readymade” 小A,带分音符)。ä用UTF-8中的两个字节编码:C3 A4.这意味着默认情况下,如果在主题字符串中找到这两个字节中的一个,那么具有该字符类的模式将成功,但这并不意味着主题字符串包含ä**:此模式成功,因为U+21 A4
↤
从条中向左箭头是用字节E2 86 A4编码的,并且找到了字节A4。要通知正则表达式引擎字符串(模式和主题)必须逐个码点读取,可以像这样启动模式:
或使用u修饰符:
总之,匹配分音符的模式可以写成这样:
或
其中
\N{U+0308}
代表组合分音符,\N{U+00A8}
代表单独的分音符。äëïöüÿ
是UNICODE块U+0080 -〉U+00 FF Latin-1补充中的 “现成的” 字符。大写字母与i修饰符一起使用。或者像这样:
或NFC规格化字符串:
eulz3vhy2#
你可以试试这个
wmvff8tz3#
这并不难。请将您的条件更改为: