如何生成至少包含一个数字的唯一字母数字字符串?
How to generate a unique alphanumeric string with atleast a number?
我需要生成一个长度为 4 的随机字符串(有效字符串是 1ABC, A12D...
)。字符串必须包含至少 1 个数字,其余可以是 [A-Z].
方法一:
protected function generate(int $length = 4): array
{
$randomString = '';
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0; $i < $length; $i++) {
$index = random_int(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
$uppercase = preg_match('@[A-Z]@', $randomString);
$number = preg_match('@[\d]@', $randomString);
if (!$uppercase || !$number) {
$this->generate();
}
return $randdomString;
}
方法二:
echo substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'),1, 4);
大多数时候,它给我正确的答案,但在某些情况下,它 return 我只有字母值(这是我最近得到的结果 XFJG
)
有人可以帮忙吗?
如果两个条件之一为真,则 OR ||
将 return 为真,因此如果没有数字,它将通过 if 子句。
您可以改为检查两个条件是否都为真:
if ($number && $uppercase) {
// do something with $values
}
运行 this again $func();
inside the if clause, will 运行 the function again generating a new string and returns $randomString;
from the function .
如果要return测试过的字符串,可以return已经测试过的$values
编辑
如果您不想 return 仅使用 A-Z 字符或仅匹配数字,您可以使用 ^\d+$
和 ^[A-Z]+$
[更新模式以仅匹配数字或仅匹配 A-Z 字符
如果条件为真,则进行递归调用。
protected function generate(int $length = 4): string
{
$randomString = '';
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0; $i < $length; $i++) {
$index = random_int(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
$uppercase = preg_match('@^[A-Z]+$@', $randomString);
$number = preg_match('@^\d+$@', $randomString);
if ($uppercase || $number) {
$randomString = $this->generate();
}
return $randomString;
}
看到一个PHP demo。
我需要生成一个长度为 4 的随机字符串(有效字符串是 1ABC, A12D...
)。字符串必须包含至少 1 个数字,其余可以是 [A-Z].
方法一:
protected function generate(int $length = 4): array
{
$randomString = '';
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0; $i < $length; $i++) {
$index = random_int(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
$uppercase = preg_match('@[A-Z]@', $randomString);
$number = preg_match('@[\d]@', $randomString);
if (!$uppercase || !$number) {
$this->generate();
}
return $randdomString;
}
方法二:
echo substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'),1, 4);
大多数时候,它给我正确的答案,但在某些情况下,它 return 我只有字母值(这是我最近得到的结果 XFJG
)
有人可以帮忙吗?
如果两个条件之一为真,则 OR ||
将 return 为真,因此如果没有数字,它将通过 if 子句。
您可以改为检查两个条件是否都为真:
if ($number && $uppercase) {
// do something with $values
}
运行 this again $func();
inside the if clause, will 运行 the function again generating a new string and returns $randomString;
from the function .
如果要return测试过的字符串,可以return已经测试过的$values
编辑
如果您不想 return 仅使用 A-Z 字符或仅匹配数字,您可以使用 ^\d+$
和 ^[A-Z]+$
[更新模式以仅匹配数字或仅匹配 A-Z 字符
如果条件为真,则进行递归调用。
protected function generate(int $length = 4): string
{
$randomString = '';
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0; $i < $length; $i++) {
$index = random_int(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
$uppercase = preg_match('@^[A-Z]+$@', $randomString);
$number = preg_match('@^\d+$@', $randomString);
if ($uppercase || $number) {
$randomString = $this->generate();
}
return $randomString;
}
看到一个PHP demo。