我试图从字符串中删除所有字符,除了:
- 字母数字字符
- 美元符号(
$
) - 下划线(
_
) - 码位
U+0080
和U+FFFF
之间的Unicode字符
通过这样做,我得到了前三个条件:
preg_replace('/[^a-zA-Z\d$_]+/', '', $foo);
我该如何满足第四个条件?I looked at using \X
,但必须有一个比列出65000+字符更好的方法。
我试图从字符串中删除所有字符,除了:
$
)_
)U+0080
和U+FFFF
之间的Unicode字符通过这样做,我得到了前三个条件:
preg_replace('/[^a-zA-Z\d$_]+/', '', $foo);
我该如何满足第四个条件?I looked at using \X
,但必须有一个比列出65000+字符更好的方法。
3条答案
按热度按时间whlutmcx1#
您可以用途:
\w
-相当于[a-zA-Z0-9_]
\x{0080}-\x{FFFF}
匹配代码点U+0080
和U+FFFF
之间的字符/u
用于正则表达式中的Unicode支持yzckvree2#
现代化答案
如果只排除代码点U+80 - U+FFFF,那将是不明智的
Unicode范围扩展到U+10 FFFF。
如今,这涵盖了超过16位bmp范围的许多字符。
我将向你们展示如何在你们想要的范围内
utf-16或utf-8/32,您可以控制也可以不控制。
简体中文(zh_cn)
简体中文(zh_cn)
ukqbszuj3#
如果你真的想清理MySQL默认排序规则(utf8_general_ci)的字符串,删除表情符号是不够的。utf8_general_ci对应于字符集utf8/utf8 mb 3,它只支持0x 000到0xFFFF(基本多语言平面)的范围。因此,我建议删除任何代码超过0xFFFF的字符(0x 10 FFFF/16:SPUA-B,我认为这是迄今为止根据https://en.wikipedia.org/wiki/Plane_(Unicode)已知的最大字符)。