PHP preg_match范围不允许int变量只允许原始整数[duplicate]

pdkcd3nj  于 2022-12-28  发布在  PHP
关注(0)|答案(2)|浏览(96)
    • 此问题在此处已有答案**:

Variable inside regular expression php(2个答案)
2天前关闭。

    • SOLVED**我需要用额外的花括号将变量括起来
preg_match("/^[A-Za-z0-9_-]{{$min},{$max}}+$/i", $username)

我尝试在preg_match(){,}中使用一些整型变量进行范围检查,但是如果我尝试使用定义的变量而不是原始数字,它会抛出一个错误。
下面的示例抛出一个错误:

$min = 4;
$max = 20;
preg_match("/^[A-Za-z0-9_-]{$min,$max}+$/i", $username)

下面的例子有效,而上面的例子无效,尽管它们都是整型变量。

preg_match("/^[A-Za-z0-9_-]{4,20}+$/i", $username)

允许我举第一个例子吗?

bihw5rsg

bihw5rsg1#

我希望这对你有帮助。

$min = 4;
$max = 20;

preg_match("/^[A-Za-z0-9_-]{".$min.",".$max."}+$/i", $username);

差值以**{".$最小值",".$最大值"}**表示

h7appiyu

h7appiyu2#

您使用了以下字符串插值语法之一:{$var},不允许使用多个变量,如{$foo, $bar}
您还应该删除量词值之间的空格:{4,20}.
您可以转义花括号以避免语法错误:

preg_match("/^[A-Za-z0-9_-]\{$min,$max\}+$/i", $username);

或者可以使用串联sprintf()等。

    • 额外好处**:你可以缩短RegEx。你不需要A-Z范围,因为你的RegEx是不区分大小写的,这要归功于i标志。你也不需要量词后面的+
preg_match("~^[a-z0-9_-]\{$min,$max\}$~i", $username);

相关问题