设置正则表达式中的最大长度

时间:2014-10-02 13:34:05

标签: php regex pattern-matching preg-match

我一直在谷歌搜索这个寻找类似的例子。我需要使用以下正则表达式(可行)但将允许的字符数限制为20:

/^[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)*$/

问题是,唯一的例子是使用更简单的匹配模式,我似乎无法在上面模拟:

例如/ ^。{1,35} $ /

3 个答案:

答案 0 :(得分:2)

使用strlen()验证长度:

if (strlen($value) > 20)
{
    // Too long
}
else 
{
    // OK, perform regex
}

答案 1 :(得分:2)

我认为你想要允许的字符长度是1到20.如果是,那么你可以试试下面的正则表达式。

^(?=.{1,20}$)[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)*

DEMO

第一个断言

(?=.{1,20}$)正面预测字符长度必须是1到20。

答案 2 :(得分:0)

@wavemode将第一个匹配限制为一个字符,然后确保第二个匹配的长度在0到19之间:

在2和第一个符号之间添加alphanum重复。

/^[A-Za-z0-9](?:[A-Za-z0-9]*[@_\-.][A-Za-z0-9]+){0,19}$/