2017-10-09 8 views
-4

やあ私は長い時間のために、次のコードを使用してきた有力ないと終了コンマ

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

しかし、ユーザーが

理由もなく、すべての時間をコンマを入力環境の楽しみを持っているので、それはもはや働いています

だから私はこの正規表現を使用しようとしました$regex = "/[\s,]+/"

それは非常に良い効果をしましたが、意図していない。

達成したいのは、先頭または末尾に特殊文字がないことです。英数字のみです。そして、分離ごとに1つのだけのコンマはので、私の最終目標は、まさにそれを行うにはどのようにOne, Two, Three, Four, Five, Six, Seven

から/,One, Two, Three, Four,,, Five, , Six, , , Seven,./

から

のようなものでしょうか?

+0

$文字列の '/'とは何ですか? –

+1

無意味な入力を意識するのではなく、単に検証しないと却下するだけです。一方、この入力をどのように求めているか再考する必要があります。おそらく、チェックボックスはテキスト入力よりも良い選択肢でしょう。 – jeroen

+0

複数のカンマを実際の値に含めることが有効な場合がありますか? –

答えて

1

私は(フラグPREG_SPLIT_NO_EMPTYpreg_splitを使用して考えるimplodeが良い方法です:

$parts = preg_split('~[^[:alnum:],]*,[^[:alnum:]]*~', $str, -1, PREG_SPLIT_NO_EMPTY); 
$result = implode(', ', $parts); 
+0

実際にはより良い方法です。結果を爆発させる必要はないので、パターンはどのように正確に機能しますか? – Axon

+1

@Axon:何も信じられないほど、少なくとも1つのコンマを含む英数字以外の部分文字列を分割し、空の部分は除外します。 –

+0

空でない場合は、改行するための改行をカンマで置き換えることはできますか? – Axon

0

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) 
+0

スペースがあった場所にカンマを挿入します。 –

+0

@rickdenhaanはうまくいきましたが、問題は英数字だけでいいのですが、 '&'や '{}'や '[]'を書く人がいるかもしれません。 – Axon

+0

最初と最後だけ?または中にも? – rickdenhaan

1

使用を取り除くために)(トリムシンボルを最初と最後に使用し、この正規表現を使用して誤ったコンマの使用法を使用法に変換します。

次の正規表現でそれを行うことができます。

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

Regex101正確にどのように正規表現作品を通してあなたを歩くことができます。

関連する問題