以此为例:
$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse";
看看Ralph Kramden之前的空间?我需要删除该空间而不是名称之间的空格。而且我需要在名称之前还有其他任何空格。
P.S。:我注意到有关空白和这种情况的有趣行为。请看以下示例:
如果没有像这样打破回声:
$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse";
$nameArray = explode(",", $nameStr);
foreach($nameArray as $value)
{
echo $value;
}
结果是:海绵BobBart Simpson Ralph Kramden Uncle ScroogeMickey Mouse
请注意在Ralph Kramden
之前仍有空白区域然而,当线路破坏上面的回声时如此:
echo $value . "<br />";
输出结果为:
Sponge Bob
巴特辛普森 拉尔夫克拉姆登Uncle Scrooge
米老鼠
并且所有名称都与名称前面没有空格的内容对齐。
那么PHP在字符串开头的白色空间的确切行为是什么?
干杯。谢谢你的回复。
答案 0 :(得分:3)
今天使用正则表达式解决每一个小问题的注意事项
$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse";
$nameArray = explode(",", $nameStr);
foreach($nameArray as $value)
{
echo trim($value);
}
修改强>
PHP的行为空白区域是将其视为适当的角色并按照您的说法执行操作。 HTML的行为(或者至少是Web浏览器的行为)是相当不同的......你需要学习和理解这种差异
答案 1 :(得分:3)
正如你所提到的,只有在逗号之后删除空格,考虑到逗号之前的空格可以留下。
您也可以使用以下内容:
$nameStr = "Sponge Bob, Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse";
while (strpos($nameStr, ', ') !== FALSE) {
$nameStr = str_replace(', ', ',', $nameStr);
}
echo $nameStr;
在此之后,您可以简单地将其分解为:
$allNames = explode(',', $nameStr);
否则迈克尔的正则表达非常好。
答案 2 :(得分:2)
尝试
$nameStr = preg_replace("/,([\s])+/",",",$nameStr);
$nameArray = explode(",", $nameStr);
这是一个可行的正则表达式解决方案,但正如其他人在上面所指出的那样,一个简单的trim()
将完成您已有的工作。
答案 3 :(得分:0)
PHP不会关心字符串中的内容,除非它正在解析变量插值。空格就像任何其他字符一样,ascii或unicode值恰好显示为“空白”。
您如何替换这些后逗号空间?
$str = str_replace(', ', ',', $str);
^--space
如果在你的Ralph
名称之前没有捕获空格,那么很可能没有空格字符(ascii 32)。您可以尝试显示它的内容:
echo ord(substr($nameArray['index of Ralph here'], 0, 1));
答案 4 :(得分:0)
你是否尝试过修剪功能?
$nameStr = "Sponge Bob,Bart Simpson, Ralph Kramden,Uncle Scrooge,Mickey Mouse";
$nameArray = explode(",", $nameStr);
for($i = 0; $i < count($nameArray); $i++) {
$nameArray[$i] = trim($nameArray[$i];
}
$newNameStr = implode(',', $nameArray);
您可以使用RegExp执行此操作,但由于看起来您对RegExp不太熟悉,因此不应使用它们,因为在执行错误时它们会花费大量性能。
答案 5 :(得分:0)
为什么不只是preg_split
?
$names = preg_split('~,\s*~', $names);
答案 6 :(得分:0)
一个简单的解决方案是避免使用正则表达式并应用trim函数:
$nameStr = 'Bart Simpson, Lisa Simpson,Homer Simpson, Madonna';
$names = explode(',', $nameStr);
foreach($names as &$name) {
$name = trim($name);
}
//当名称只有一个单词
时,这也不会动摇答案 7 :(得分:0)
这个对我有用
$string = "test1, test2, test3, test4, , ,";
array_map('trim', array_filter(explode(',', $string), 'trim'))
输出
=> [
"test1",
"test2",
"test3",
"test4",
]