我知道有很多类型的空间(em 空间、en 空间、薄空间、不间断空间等),但是,我提到的所有这些都有 HTML 实体(至少,PHP 的 htmlentities() 返回类似的内容) 。
但是,那些没有 HTML 实体的空间怎么办?
示例:[示例 URL 不再有效]
查看该帐户的昵称。它的前面有许多“ ”(空格),这些对我们来说是可见的(这不会发生在 中)。
我已经尝试过使用正则表达式进行过滤,使用 \x 转义,使用 str_replace() 进行过滤,以空格作为参数,但一点运气都没有!
您对如何过滤所有类型的空白有什么建议吗?
\s
默认情况下,将not匹配值大于 128 的空白字符。要获得这些字符,您可以充分利用其他支持 UTF-8 的序列。
(Standard disclaimer: I'm skimming the PCRE source code to compile the lists below, I may miss a character or type something incorrectly. Please forgive me.)
\p{Zs}
火柴:
- U+0020 空间
- U+00A0 不间断空格
- U+1680 奥格姆空格标记
- U+180E 蒙古文元音分隔符
- U+2000 En 四核
- U+2001 Em 四核
- U+2002 空间
- U+2003 Em 空间
- U+2004 三人空间
- U+2005 四人空间
- U+2006 六人空间
- U+2007 图形空间
- U+2008 标点空格
- U+2009 薄空间
- U+200A头发空间
- U+202F 狭窄的不间断空间
- U+205F 中等数学空间
- U+3000 表意空间
\h
(水平空白)匹配相同\p{Zs}
上面,加上
类似地,为了匹配垂直空白,有几个选项。
\p{Zl}
匹配 U+2028 行分隔符。
\p{Zp}
匹配 U+2029 段落分隔符。
\v
(垂直空白)匹配\p{Zl}
, \p{Zp}
以及以下内容
- U+000A 换行
- U+000B 垂直制表符
- U+000C 换页
- U+000D 回车
- U+0085 下一行
回到开头,在 UTF-8 模式下(即使用u
模式修饰符)\s
将匹配任何字符\p{Z}
匹配(任何符合\p{Zs}
, \p{Zl}
and \p{Zp}
将匹配),加上
- U+0009 水平制表符
- U+000A 换行
- U+000C 换页
- U+000D 回车
长话短说(我打赌您阅读了以上所有内容,不是吗?)您可能想使用\s
但请确保处于 UTF-8 模式,例如/\s/u
。将其用于实际用途,要从字符串中过滤掉那些匹配的空白字符,您可以执行类似的操作
$new_string = preg_replace('/\s/u', '', $old_string);
最后,如果您真的非常关心不包含在中的垂直空白\s
(LF和NEL)然后你可以使用字符类[\s\v]
匹配上面列出的所有 26 个空白字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)