2009-05-08 67 views
28

Tôi muốn một chuỗi regexp hoặc chuỗi khác có thể thay thế mọi thứ trừ ký tự chữ và số (a-z0-9) từ một chuỗi. Tất cả mọi thứ như ,@#$(@*810 sẽ bị tước. Bất kỳ ý tưởng?Tách mọi thứ trừ ký tự chữ và số từ một chuỗi trong PHP

Chỉnh sửa: Bây giờ tôi cần điều này để loại bỏ mọi thứ nhưng cho phép dấu chấm, vì vậy mọi thứ trừ a-z, 1-9, .. Ý tưởng?

Trả lời

56
$string = preg_replace("/[^a-z0-9.]+/i", "", $string); 

Đối sánh một hoặc nhiều ký tự không phải là-z 0-9 [không phân biệt chữ hoa chữ thường] hoặc "." và thay thế bằng ""

+0

Làm cách nào tôi có thể thay đổi điều đó để chỉ cho phép các dấu chấm (tức là)? –

+0

Điều chỉnh để cũng bao gồm "." – gnarf

+1

Bạn không cần phải thoát khỏi dấu chấm bên trong bộ ký tự. – Gumbo

2
/[^a-z0-9.]/ 

nên làm các trick

+0

Làm cách nào tôi có thể thay đổi điều đó để chỉ cho phép dấu chấm (tức là)? –

+0

@ Click Upvote: '[^.]' – Gumbo

+0

Toàn bộ số tiền vui lòng xin vui lòng? Tôi không biết cú pháp –

1

Hãy thử:

$string = preg_replace ('/[^a-z0-9]/i', '', $string); 

/i là viết tắt của trường hợp vô hồn (nếu bạn cần nó, tất nhiên).

18

Tôi thích sử dụng [^ [: alnum:]] cho điều này, ít chỗ cho lỗi hơn.

preg_replace('/[^[:alnum:]]/', '', "(ABC)-[123]"); // returns 'ABC123' 
0

Điều này cũng hoạt động để thay thế mọi thứ không phải là chữ số, ký tự từ hoặc dấu chấm có dấu gạch dưới. Hữu ích cho tên tập tin.

$clean = preg_replace('/[^\d\w.]+/', '_', $string); 
Các vấn đề liên quan