0

これが私がこれまでに持っているコードです:

function fix_comma($str) {
  $str = preg_replace('/[^0-9,]|,[0-9]*$/', ',', $str); 
  $str = preg_replace(
      array(
        '/[^\d,]/',    // Matches anything that's not a comma or number.
        '/(?<=,),+/',  // Matches consecutive commas.
        '/^,+/',       // Matches leading commas.
        '/,+$/'        // Matches trailing commas.
      ),
      '',              // Remove all matched substrings.
      $str
    );
  return $str;
}

テキスト領域の入力をコンマ区切りの数値セットに変換するとうまく機能します。

103,,,112 - 119 asdf 125 は 103,112,119,125 に変わります

ユーザーは、1 つ以上の数字にプラス記号を含めたい場合があります。

103 - 112 - 119 - 125+ は 103,112,119,125+ または 103, 112, 119, +125 は 103,112,119,+125 に変換する必要があります

プラス記号が含まれている場合に最終的な文字列から削除されないように、誰かが関数を修正できますか?

4

2 に答える 2

0

これを試して

function fix_comma($str) {
  $str = preg_replace('/[^0-9,\+]|,[0-9]*$/', ',', $str); 
  $str = preg_replace(
      array(
        '/[^\d,\+]/',    // Matches anything that's not a comma, + or number.
        '/(?<=,),+/',  // Matches consecutive commas.
        '/^,+/',       // Matches leading commas.
        '/,+$/'        // Matches trailing commas.
      ),
      '',              // Remove all matched substrings.
      $str
    );
  return $str;
}
于 2013-07-10T01:57:06.390 に答える
0

あなたの場合、 preg_match_all を使用する方が簡単なようです:

function fix_comma($str) {
    preg_match_all('~\+?+\d++\+?+~', $str, $matches);
    return implode(',', $matches[0]);
}
于 2013-07-10T02:03:18.540 に答える