4 votes

Liste des membres d'une classe de caractères

Je suis en train de créer une fonction qui doit générer des chaînes de caractères aléatoires à partir d'un ensemble donné de caractères. Je voudrais permettre aux utilisateurs de spécifier une classe de caractères regex au lieu de leur demander de spécifier chaque caractère.
Par exemple :

function a($length, $allowed_chars){
    for ($i = 0, $salt = ""; $i < $length; $i++){
        $salt .= __GET_ONE_RANDOM_CHAR_FROM_ALLOWED_CHARS__;
    }
}

Si chars autorisés est une chaîne de tous les caractères autorisés, alors c'est simple :

$characterList{mt_rand(0,strlen($characterList)-1)};

J'aimerais pouvoir spécifier les caractères autorisés de la manière suivante "./0-9A-Za-z" au lieu de "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

2voto

M42 Points 31888

Pourquoi pas :

// build a string with all printable char
$str = join('', range(' ','~'));
// define allowed char
$allowedChar = './a-zA-Z0-9';
// replace all non-allowed char by nothing, preg_quote escapes regex char
$str = preg_replace("~[^".preg_quote($allowedChar)."]~", "", $str);
echo $str,"\n";

sortie :

./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

1voto

safarov Points 7098

Je n'ai pas vérifié mais, je pense que vous comprendrez l'idée principale.

function a($length, $allowed_chars){

    $allowedCharsList = join('', array_merge(range(chr(0x1f), chr(0x23)), range(chr(0x25), chr(0x80)) )); //all printable (ascii) characters except '$'
    $allowed_chars = preg_replace("/[^$allowed_chars]/", '', $allowedCharsList);
    for ($i = 0, $salt = ""; $i < $length; $i++){
        $salt .= $allowed_chars{mt_rand(0,strlen($allowed_chars)-1)};
    }

    return $salt;
}

echo a(10, '0-9h-w');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X