Bir regex bazı karakterler kullanamazsınız

4 Cevap php
if(!eregi("^([0-9a-z_\[\]\*\- ])+$", $subuser))
    $form->setError($field, "* Username not alphanumeric");

Böyle - ve * gibi karakterler izin vermiyor neden kimse bana söyleyebilir misiniz?

if(!eregi("^([0-9a-z])+$", $subuser))
    $form->setError($field, "* Username not alphanumeric");

Bu kod orijinal parçasıdır. Bir arkadaşım üst parça değişti ve burada az ve 0-9 sağlayacak ama alışkanlık ben gerek diğer karakterleri verir. Herkes bana yardımcı olabilir misiniz?

Şimdiden teşekkürler.

4 Cevap

Parantez ifadeleri için,

Listedeki bir literal ']' eklemek için, (olası bir takip '^') ilk karakteri yapmak. Bir değişmez olarak '-', bu ilk veya son karakter, ya da bir aralığın ikinci uç noktası yapmak. '-' Bir dizi ilk uç olarak, '[.' Ve '.]' Bunu içine bir birleştirme elemanı yapmak için (aşağıya bakınız) bir edebi kullanın. Bunların dışında kullanılarak bazı kombinasyonlarda '[', '\' dahil olmak üzere tüm diğer özel karakterleri, (sonraki paragraflar) parantez ifadelerinde özel önemlerini kaybederler.

Yani bu ne istediğinizi yapmanız gerekir:

"^ ([] 0-9a-z_ [* -]) + $"

) Sizin regex PCRE'nin sözdizimi kullanır, böylece yerine eregi ve preg_match () (kullanmak zorunda.

Yerine bu kodu deneyin:

else if (!preg_match("/^([0-9a-z_\[\]* -])+$/i", $subuser)) {
$form->setError($field, "* Username not alphanumeric");
}

Fonksiyonların ereg ailesini kullanmayın - onlar doğru hatırlamak, sonunda kalktı olacak, yavaş ve.

Bu düzeltmek gerekir

if ( preg_match( "/^[^0-9a-z_\[\]* -]$/i", $subuser )
{
    $form->setError( $field, "* Username not alphanumeric" );
}

Hatta desen nonalphanum ayırıcısını sarılmış gereken preg_ * fonksiyonları kullanarak:

"~ ^ ([0-9a-z_ [] * -]) + $ ~"