PHP Özel Karakterler Testi

4 Cevap php

Bir kullanıcı adı Ben tanımlayan özel karakterlerden bir numara içeriyorsa kontrol etkili bir yolu nedir.

Örnekler:% # ^. ! @ & () + / "` ~ <> {} [] | = -?;

Ben bunları algılamak ve bir boolean dönüş, sadece onları dışarı şerit değil gerekir.

Muhtemelen bir süper kolay bir soru ama ben Koşullamalar ya da özensiz bir döngü büyük bir liste daha bunu yapmanın daha iyi bir yol gerekir.

4 Cevap

Gibi, izin verilen listede olmayan herhangi bir karakter olup olmadığını daha iyi belirlemek için:

preg_match('![^a-z0-9]!i', $nickname);

Regex, genellikle, kullanıcı adları gibi özellikle alfanümerik varlıkları bir izin dizi test için gitmek yoludur. Izin verilmeyen karakter seti küçük ve / veya ardışık olmayan Ancak, eğer (ki kolayca aralıkları ile belirtilmemiş olduğu) bu daha iyi performans alabilirsiniz:

strspn($string,'%#^.!@&()+/"?`~<>{}[]|=-');

Bu birinci alt dizenin uzunluğu, o (hiçbir izin verilmeyen karakterler varsa 0 olacaktır) sadece izin verilmeyen karakterden oluşmaktadır bulundu döndürür.

Düzenli ifadeler ile \ w özel karakterler "herhangi bir kelime karakteri" anlamına gelir ve \ d basamak yani. ^ Parantez içinde inkâr veya temelde parantez içinde değil bir şey anlamına gelir. Aşağıdaki kod dizesi içinde sözcük olmayan karakterler var göstermek için "doğru" ya da bir echo 1 olacaktır.

$string = '% # ^ . ! @ & ( ) + / " ? ` ~ < > { } [ ] | = - ;'
echo preg_match('~[^\w\d]~', $string);

Sen bir karakter kümesi verilen bir karakter dize içinde görünen sayısını saymak için aşağıdaki gibi bir şey kullanabilirsiniz:

<?php

/**
 * Count the number of times any char from $char is found in $search
 * @param $search   Looks for the chars here
 * @param $chars    The chars to look for
 * @return int
 */
function countChars($search, $chars)
{
    $chars = str_replace(
        array("\\", '[', ']', '^', '-'),
        array("\\\\", '\[', '\]', '\^', '\-'), $chars);

    $results = array();
    preg_match_all("/[$chars]/", $search, $results, PREG_SET_ORDER);
    return count($results);
}

var_dump(countChars("Hello, World", "ol"));
var_dump(countChars("Lorem ipsum...", ".m")); // searches for . and m only
var_dump(countChars("^[]-^\\*", "^[]-\\"));

Umut olur.