regex 我如何删除字符串中最后一个逗号和所有空格,然后使用PHP进行清理?

roejwanj  于 2023-02-05  发布在  PHP
关注(0)|答案(2)|浏览(137)

我想从输入字段中获取字符串,然后格式化并清理它。
我想要得到的字符串是自然数,用逗号分隔,没有任何空格。首先我想删除所有空格和最后一个逗号。我的意思是,如果格式化的字符串不符合我想要的,我希望它返回空字符串。

//OK examples(without any spaces)
1,2,123,45,7
132,1,555,678
//NG examples
aaa,111,2365
1,2,123,45,7,
-1,2,123,45,7,,,
1, 2, 123, 45,  7

首先我想删除空格和最后一个逗号1,235,146,=〉1,235,146
我尝试了以下代码

$input = str_replace(' ', '', $input);
rtrim($input, ',');
if (preg_match('/^\d(?:,\d+)*$/', $input)) {
    return $input;
}
return '';

如果字符串的最后一个逗号后面有空格,它返回空字符串。

1,2,123,45,7,   => //returns empty string.

我想将此格式设置为"1,2,123,45,7"。
抱歉,我解释的太混乱了...

jckbn6z7

jckbn6z71#

替换空格并修剪开头或结尾处的逗号和空格:

$result = str_replace(' ', '', trim($string, ', '));

或者:

$result = trim(str_replace(' ', '', $string), ',');

如果你只想要数字和逗号(没有字母等),也许:

if(!preg_match('/^[\d,]+$/', $string)) {
    //error
}

但是,对于没有逗号的单个数字,这不会出错。

4jb9z9bj

4jb9z9bj2#

用途

\s+|,+\s*$

参见proof

解释

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  \s+                      whitespace (\n, \r, \t, \f, and " ") (1 or
                           more times (matching the most amount
                           possible))
--------------------------------------------------------------------------------
 |                        OR
--------------------------------------------------------------------------------
  ,+                       One or more ','
--------------------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

PHP语言:

preg_replace('/\s+|,+\s*$/', '', $input)

相关问题