Php 正则表达式-preg_replace-一个返回空格,另一个不返回任何内容
我正在清理一个UTF-8字符串:大写首字母-删除特殊字符-允许空格-允许逗号分隔和数字 我想知道,是否有可能创造出比下面更优雅的东西。 第一个preg_replace返回一个空格。其他将不替换任何内容Php 正则表达式-preg_replace-一个返回空格,另一个不返回任何内容,php,regex,utf-8,preg-replace,Php,Regex,Utf 8,Preg Replace,我正在清理一个UTF-8字符串:大写首字母-删除特殊字符-允许空格-允许逗号分隔和数字 我想知道,是否有可能创造出比下面更优雅的东西。 第一个preg_replace返回一个空格。其他将不替换任何内容 $cleanCats = array_map(function ($element) { $oneSpace = preg_replace('!\s+!', ' ', $element); $clean = preg_replace('~[^\pL\d ]+~u','',$one
$cleanCats = array_map(function ($element) {
$oneSpace = preg_replace('!\s+!', ' ', $element);
$clean = preg_replace('~[^\pL\d ]+~u','',$oneSpace);
return mb_strtoupper(mb_substr($clean, 0, 1)) . mb_substr($clean, 1);
}, $arrFromHtml);
echo json_encode('*' . strip_tags(implode(',', $cleanCats)) . '*');
$arrFromHtml如下所示:
Array
(
[0] => B:.M¤%&/W
[1] => λgreek
[2] => бжÐrussian
[3] => H<>elloj
[4] => com,m()/a
[5] => Åó*dź
[6] => 1 spc
[7] => 3 spc
[8] => æøå danish
[9] => Euroâ¬
)
您可以删除第一行
preg\u replace
并使用
$clean = preg_replace('~[^\p{L}\d\s]+|(\s)+~u','$1', $element);
它将查找所有出现的
-1+字符,Unicode字母、数字或空格除外[^\p{L}\d\s]+
-或|
-1个或多个空格,最后一个空格捕获到组1中(\s)+
$1
,即组1中捕获的最后一个空格(因此,除最后一个空格外,所有空格都被删除)
要在字符串中也允许
,只需将其添加到求反字符类:
$clean = preg_replace('~[^\p{L}\d\s.]+|(\s)+~u','$1', $element);
尝试删除第一行
preg_replace
并使用$clean=preg_replace('~[^\p{L}\d\s]+|(\s)+~u','$1',$element)代码>。在执行任何操作之前,必须解决编码问题。当您看到类似于ÃAlpha
或λ
的情况时,这意味着utf8字符串未正确显示(例如,当html中缺少编码时),或者字符串已被严重重新编码。一旦你用æ
代替Ã
和ͻ
代替λ
你就可以继续编辑了,否则你所要做的就是丢失信息。浏览器窗口不能正确显示数组。我可以使用always JSON控制JSON数据从HTML5传递到PHP/Ajax@WiktorStribiżew谢谢,这条缝很好用。我的网页上的这个字符串:
B:,.M·%&/W;λ希腊语;;;жжЖ俄语;Hel.loj;com,m()/a;Łódź;1个spc;3统计过程控制;丹麦人;欧元€
的结局是:宝马、希腊语、俄罗斯语、希腊语、逗号、拉丁语、1 spc、3 spc、丹麦语、欧元
顺便说一句:如果我想允许一个点(.)-我应该如何更改正则表达式?@Thorkil:好的,好消息,在
标记之间添加
,并用正确的显示编辑你的问题。
$clean = preg_replace('~[^\p{L}\d\s.]+|(\s)+~u','$1', $element);