REGEX (PHP) .. uçlarında alfanümerik olmayan karakterleri kaldırmak?

3 Cevap php
$test = "!!!   sdfsdf   sd$$$fdf   ___";
$test = str_replace(' ', '_', $test); // Turn all spaces into underscores.
echo $test."<br />"; // Output: !!!___sdfsdf___sd$$$fdf______

$test = preg_replace('/[^a-zA-Z0-9_-]/', '-', $test); // Replace anything that isn't alphanumeric, or _-, with a hyphen.
echo $test."<br />"; // Output: !!!___sdfsdf___sd---fdf______

$test = preg_replace('/([_-])\1+/', '$1', $test); // Reduce multiple _- in a row to just one.
echo $test."<br />"; // Output: !_sdfsdf_sd-fdf_

Yukarıdaki kod ben şu anda ne var, ne için regex anlamaya çalışıyorum uçlarındaki herhangi bir alfasayısal olmayan karakterler kesmek için nasıl. Yani "! _sdfsdf_sd-Fdf_" için "sdfsdf_sd-fdf" nihai çıktı dönüyor.

3 Cevap

Sen kullanabilirsiniz trim():

$test = trim($test, '_-');
echo $test;

"!" ilk düzenli ifadenin geçmiş bunu yapmaz.

Bu ile tüm kodu değiştirebilirsiniz:

$test = preg_replace('/[^a-zA-Z0-9]+/', '_', $test);
$test = trim($test, '_');

İlk _ ile bir veya birden fazla yasadışı karakterlerin tüm tekrarlarını değiştirmek ve ikinci başlangıç ​​ve bitiş kalan _ rmove olacaktır.

[a-zA-Z0-9].*[a-zA-Z0-9]

Anlamı: alfanümerik karakter okuyun, sonra biz sonunda en az bir alfasayısal karakter alabilirsiniz emin, biz olarak bir şey kadar okudum.