2011-01-21 33 views
12

tôi sử dụng những dòng mã để loại bỏ tất cả các dấu chấm câu, biểu tượng, vv như bạn có thể nhìn thấy chúng trong mảng,Cách tốt nhất để xóa dấu chấm câu, ký hiệu, dấu phụ, ký tự đặc biệt là gì?

$pattern_page = array("+",",",".","-","'","\"","&","!","?",":",";","#","~","=","/","$","£","^","(",")","_","<",">"); 

$pg_url = str_replace($pattern_page, ' ', strtolower($pg_url)); 

nhưng tôi muốn làm cho nó đơn giản như nó có vẻ ngớ ngẩn để liệt kê tất cả những thứ tôi muốn xóa trong mảng vì có thể có một số ký tự đặc biệt khác mà tôi muốn xóa.

Tôi nghĩ của việc sử dụng các biểu thức chính quy dưới đây,

$pg_url = preg_replace("/\W+/", " ", $pg_url); 

nhưng nó không loại bỏ dưới điểm - _

cách tốt nhất để loại bỏ tất cả những công cụ này là gì? Biểu thức chính quy có thể làm điều đó không?

+1

Bạn có thể xóa mọi thứ trừ '[A-Za-z0-9]' ;-) – thedom

+0

aw! cám ơn rất nhiều! – laukok

Trả lời

25

Tùy thuộc vào cách tham lam bạn muốn có, bạn có thể làm một cái gì đó như:

$pg_url = preg_replace("/[^a-zA-Z 0-9]+/", " ", $pg_url); 

này sẽ thay thế bất cứ điều gì đó không phải là một bức thư, số lượng hoặc không gian.

+1

cảm ơn bạn rất nhiều vì điều này. – laukok

+0

nhanh chóng và dễ dàng :) cảm ơn – Goaler444

12

Sử dụng các lớp:

preg_replace('/[^[:alpha:]]/', '', $input); 

sẽ loại bỏ bất cứ điều gì đó là không được coi là một "nhân vật" của miền địa phương hiện đang thiết lập. Nếu đó là dấu chấm câu, bạn tìm cách loại bỏ, lớp học sẽ là [:punct:].

\W có nghĩa là "bất kỳ phi từ nhân vật" và là đối diện của \wbao gồm dấu gạch dưới (_).

Các vấn đề liên quan