Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 剥离前导和结束逗号_Php_Regex - Fatal编程技术网

Php 剥离前导和结束逗号

Php 剥离前导和结束逗号,php,regex,Php,Regex,嗨,我已经使用下面的代码很长时间了 $string = "/,One, Two, Three, Four,,, Five, , Six, , , Seven,./"; $regex = "/^[,\s]+|[\s,]+$/"; echo preg_replace($regex, ',', $string); 但它已经不起作用了,因为用户一直在无缘无故地享受输入逗号的乐趣 所以我尝试使用这个正则表达式$regex=“/[\s,]+/” 它的效果很好,但没有达到预期效果 我想要实现的是没有任何

嗨,我已经使用下面的代码很长时间了

$string = "/,One, Two, Three, Four,,, Five, ,  Six,  , , Seven,./";
$regex = "/^[,\s]+|[\s,]+$/";
echo preg_replace($regex, ',', $string);
但它已经不起作用了,因为用户一直在无缘无故地享受输入逗号的乐趣

所以我尝试使用这个正则表达式
$regex=“/[\s,]+/”

它的效果很好,但没有达到预期效果

我想要实现的是没有任何前导或结尾的特殊字符,只有字母数字字符。每个间隔只有一个逗号,所以我的最终目标是

/,一,二,三,四,五,六,七,./

1,2,3,4,5,6,7


具体怎么做?

您可以使用
trim()
去掉字符串开头和结尾的句点、逗号和斜杠。然后,您可以使用
preg_replace()
对中间的逗号和空格混合进行消毒:

$string = "/,One, Two, Three, Four,,, Five, , Thirty One, , Six,  , , Seven,./";
$regex = "/\s*,[,\s]+/";
echo preg_replace($regex, ', ', trim($string, ',./'));

// "One, Two, Three, Four, Five, Thirty One, Six, Seven"
编辑如果
trim()
不够,需要剪切所有非字母数字字符,也可以使用表达式。这并不漂亮,但很有效:

$trimmed = preg_replace('/(^[^\w]*)|([^\w]*$)/', '', $string)

我认为使用
preg\u split
(标记为
preg\u split\u NO\u EMPTY
)和
内爆是一种好方法:

$parts = preg_split('~[^[:alnum:],]*,[^[:alnum:]]*~', $str, -1, PREG_SPLIT_NO_EMPTY);
$result = implode(', ', $parts);
使用trim()去掉开头和结尾的符号,然后使用此正则表达式将逗号的错误用法转换为正确用法

可以使用以下正则表达式执行此操作:

echo preg_replace("/((\W{1,}),(\W{1,}))/", ', ', trim($string, ',./'));

您可以详细了解正则表达式是如何工作的。

美元字符串中的
/
是怎么回事?与其尝试理解无意义的输入,我只会在它没有验证时拒绝它。另一方面,您可能应该重新考虑如何请求此输入:也许复选框比文本输入更好。是否存在在实际值中使用多个逗号可能有效的情况?@MarkBaker只是特殊字符。它从开始/结束处修剪特定的字符,并将
空格*(,空格*)+
模式缩小为
,+space
。这将在空格处插入逗号。@rickdenhaan工作得很好,但问题是我只需要字母数字字符,有些人可能会写
&
{}
[]
它会通过。只在开头和结尾?还是在中间?@ Rekdhana:你让我注意到另一个问题,我想我必须在中间允许特定的特殊字符,但在结尾或开始时没有特殊的字符。但在这一点上,您的代码就是解决方案。但是,是的,只有字母数字在结尾和开头。我添加了一个选项,用另一个
preg_replace()
替换
trim()
,这实际上是一个更好的方法,因为我不需要分解结果,模式到底是如何工作的?@Axon:没什么令人难以置信的,它在具有至少一个逗号的非字母数字字符的子字符串上拆分,并排除空部分。如果新行不是空的,是否可以添加一个逗号替换新行?