2010-11-17 40 views
6

Tôi đang cố gắng để loại bỏ tất cả những gì không phải là chữ và số, hoặc là một không gian với _:gian Loại bỏ bất cứ điều gì và đó không phải là chữ và số

$filename = preg_replace("([^a-zA-Z0-9]|^\s)", "_", $filename); 

Tôi đang làm gì sai ở đây, nó không có vẻ công việc. Tôi đã thử một số kết hợp regex ... (và tôi thường không phải là rất tươi sáng).

+0

Tôi hơi confused-- bạn có muốn thay thế dấu cách bằng dấu "_" hay không? – climbage

+0

Vâng, vì một điều bạn đã bỏ qua khá nhiều ký tự: 'ˋunichars -a '[\ p {Alpha} \ p {Số}]' '[^ a-zA-Z0-9]' | wc -lˋ == 14717'. Không phải là một nơi tốt để bắt đầu. – tchrist

+0

Bạn nên đặt '\ s' trong dấu ngoặc vuông. Nếu không '^ \ s' chỉ khớp các khoảng trắng ở đầu'^'của đối tượng. Cũng sử dụng '/../' để bao quanh, các dấu ngoặc tròn chỉ để chụp. – mario

Trả lời

11

Hãy thử điều này:

$filename = preg_replace("/[^a-zA-Z0-9 ]/", "_", $filename); 
+1

Tôi đề xuất kế toán cho gần 15.000 ký tự khác mà bạn quên mất. – tchrist

+0

Regex không xem xét các ký tự Unicode hợp lệ – stillstanding

0

Hãy thử

$filename = preg_replace("/[a-zA-Z0-9]|\s/", "_", $filename); 
+0

Ồ. Ừm, như cái gì '\ s' đang làm * bên ngoài * lớp nhân vật? Và những gì về hàng ngàn chữ số mà bạn quên mất, eh? – tchrist

7
$filename = preg_replace('~[\W\s]~', '_', $filename); 

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn muốn thay thế bất kỳ không gian (\ s) hoặc không alphanumerical (\ W) với ký tự '_'. Điều này nên làm tốt. Lưu ý \ W là chữ hoa, trái với chữ thường \ w sẽ khớp với các ký tự chữ và số.

+2

Ý nghĩa của '\ W' thay đổi từ một trong những hương vị tiếp theo, nhưng trong PHP nó khớp với bất kỳ ký tự nào không phải là một ký tự từ ASCII, tức là' [A-Za-z0-9_] '. Điều đó bao gồm các ký tự khoảng trắng ASCII (vì vậy '\ s' là thừa) và các ký tự chữ và số từ các tập lệnh khác. Ngay cả các chữ cái Latinh có dấu được coi là các ký tự không phải từ bằng '\ W'. –

2

Các giải pháp mà làm việc cho tôi là:

$filename = preg_replace('/\W+/', '_', $filename); 

Các + trận khối của một hoặc nhiều lần xuất hiện của \W khoảng trắng trong đó bao gồm không gian và tất cả các ký tự không phải chữ

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