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);

[^...inPREG函数这样的表达式意味着您希望保留所有后续字符(因此您的表达式导致 not(!) 删除&符号、括号

BTW:我在表达式中省略了下划线,因为它会再次被下划线替换,所以不需要在正则表达式中列出它

于 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 回答