<?php namespace Faker\Extension; /** * A class with some methods that may make building extensions easier. * * @experimental This class is experimental and does not fall under our BC promise */ final class Helper { /** * Returns a random element from a passed array. */ public static function randomElement(array $array) { if ($array === []) { return null; } return $array[array_rand($array, 1)]; } /** * Replaces all hash sign ('#') occurrences with a random number * Replaces all percentage sign ('%') occurrences with a non-zero number. * * @param string $string String that needs to bet parsed */ public static function numerify(string $string): string { // instead of using randomDigit() several times, which is slow, // count the number of hashes and generate once a large number $toReplace = []; if (($pos = strpos($string, '#')) !== false) { for ($i = $pos, $last = strrpos($string, '#', $pos) + 1; $i < $last; ++$i) { if ($string[$i] === '#') { $toReplace[] = $i; } } } if ($nbReplacements = count($toReplace)) { $maxAtOnce = strlen((string) mt_getrandmax()) - 1; $numbers = ''; $i = 0; while ($i < $nbReplacements) { $size = min($nbReplacements - $i, $maxAtOnce); $numbers .= str_pad((string) mt_rand(0, 10 ** $size - 1), $size, '0', STR_PAD_LEFT); $i += $size; } for ($i = 0; $i < $nbReplacements; ++$i) { $string[$toReplace[$i]] = $numbers[$i]; } } return self::replaceWildcard($string, '%', static function () { return mt_rand(1, 9); }); } /** * Replaces all question mark ('?') occurrences with a random letter. * * @param string $string String that needs to bet parsed */ public static function lexify(string $string): string { return self::replaceWildcard($string, '?', static function () { return chr(mt_rand(97, 122)); }); } /** * Replaces hash signs ('#') and question marks ('?') with random numbers and letters * An asterisk ('*') is replaced with either a random number or a random letter. * * @param string $string String that needs to bet parsed */ public static function bothify(string $string): string { $string = self::replaceWildcard($string, '*', static function () { return mt_rand(0, 1) ? '#' : '?'; }); return static::lexify(static::numerify($string)); } private static function replaceWildcard(string $string, string $wildcard, callable $callback): string { if (($pos = strpos($string, $wildcard)) === false) { return $string; } for ($i = $pos, $last = strrpos($string, $wildcard, $pos) + 1; $i < $last; ++$i) { if ($string[$i] === $wildcard) { $string[$i] = call_user_func($callback); } } return $string; } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
AddressExtension.php | File | 762 B | 0644 |
|
BarcodeExtension.php | File | 844 B | 0644 |
|
BloodExtension.php | File | 527 B | 0644 |
|
ColorExtension.php | File | 1.11 KB | 0644 |
|
CompanyExtension.php | File | 386 B | 0644 |
|
CountryExtension.php | File | 258 B | 0644 |
|
DateTimeExtension.php | File | 9.04 KB | 0644 |
|
Extension.php | File | 250 B | 0644 |
|
ExtensionNotFound.php | File | 210 B | 0644 |
|
FileExtension.php | File | 547 B | 0644 |
|
GeneratorAwareExtension.php | File | 489 B | 0644 |
|
GeneratorAwareExtensionTrait.php | File | 478 B | 0644 |
|
Helper.php | File | 3.14 KB | 0644 |
|
NumberExtension.php | File | 1.36 KB | 0644 |
|
PersonExtension.php | File | 1.1 KB | 0644 |
|
PhoneNumberExtension.php | File | 365 B | 0644 |
|
UuidExtension.php | File | 340 B | 0644 |
|
VersionExtension.php | File | 627 B | 0644 |
|