1

私の要件は、アンダースコアを除くすべての特殊記号を文字列から削除することです。

私は使っている..

$string = 'text-text_text+text@text(text)text&text.text*text\text/text';
$columnName = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '_', $string);

出力:

text-text_text_text_text(text)text&text.text_text_text_text

ただし、ピリオド、アンパサンド、括弧、およびダッシュは削除されません。この正規表現を作成している間、私は無力感を感じました。助けてください..

4

2 に答える 2

8

文字、数字、アンダースコア以外のすべての文字を削除したい場合は、単に使用します

preg_replace('/[^a-zA-Z0-9]/', '_', $string);

[^...関数内のような式PREGは、後続のすべての文字を保持することを意味します (したがって、式の結果は not(!) アンパサンド、ブラケット aso を削除します

ところで:アンダースコアは再びアンダースコアに置き換えられるため、式のアンダースコアを省略します。正規表現にリストする必要はありません

于 2012-09-06T06:10:11.400 に答える
4

試す:

$string = 'text-text_text+text@text(text)text&text.text*text\text/text';
$columnName = preg_replace('/[-`~!@#$%\^&*()+={}[\]\\\\|;:\'",.><?\/]/', '_', $string);

出力:

text_text_text_text_text_text_text_text_text_text_text_text
于 2012-09-06T06:06:11.510 に答える