1

我想从输入字段中获取字符串,然后对其进行格式化和清理。

我想得到的字符串是用逗号分隔的自然数,没有任何空格。首先,我想删除所有空格和最后一个逗号。我的意思是如果格式化的字符串与我想要的不匹配,我希望它返回空字符串。

//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”。

对不起我乱七八糟的解释...

4

2 回答 2

3

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

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

或者:

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

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

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

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

于 2020-08-13T21:07:40.730 回答
1

利用

\s+|,+\s*$

证明

解释

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)
于 2020-08-13T20:53:45.420 回答