2010-06-16 4 views
25

Как я могу использовать PHP для выделения всех символов, которые не являются альфа-цифрами, числами, пробелами или прокруткой?Regex: Strip non alpha numeric или пунктуация

Я пробовал следующее, но он прерывает пунктуацию.

preg_replace("/[^a-zA-Z0-9\s]/", "", $str); 

ответ

31
preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", $str); 

Пример:

php > echo preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", "⟺f✆oo☃. ba⟗r!"); 
foo. bar! 

\p{P} матчи все символы пунктуации Unicode (см Unicode character properties). Если вы только хотите разрешить определенную пунктуацию, просто добавьте их в класс отрицательных символов. Например:

preg_replace("/[^a-zA-Z0-9\s.?!]/", "", $str); 
+0

, чтобы добавить:. ? ! правильный – Tedd

+0

Второй будет. Первая позволяет все знаки препинания. –

+0

Кажется, что они разделяют ВСЕ символы :( – Tedd

3

Вы собираетесь должен перечислить знаки препинания в явном виде нет стенографии для этого (например, \s является сокращением для пробельных символов).

preg_replace('/[^a-zA-Z0-9\s\-=+\|[email protected]#$%^&*()`~\[\]{};:\'",<.>\/?]/', '', $str); 
0
$str = trim($str); 
$str = trim($str, "\x00..\x1F"); 
$str = str_replace(array("&quot;","&#039;","&amp;","&lt;","&gt;"),' ',$str); 
$str = preg_replace('/[^0-9a-zA-Z-]/', ' ', $str); 
$str = preg_replace('/\s\s+/', ' ', $str); 
$str = trim($str); 
$str = preg_replace('/[ ]/', '-', $str); 

Надеется, что это помогает.

Смежные вопросы