preg_match不允许最后一个字符为下划线或短划线

时间:2015-10-05 12:11:13

标签: php regex

我有一个适用于用户名的正则表达式。 我想稍微调整它来阻止-_字符被用作用户名的第一个/最后一个字符。但是,允许他们在用户名中的其他地方。

这是我到目前为止所做的。

if(!preg_match('/^[a-zA-Z0-9_-]{3,16}+$/', $user)){
    echo 'not valid';
} else {
    echo "is valid username";
}

2 个答案:

答案 0 :(得分:3)

正则表达式末尾的+实际上应该抛出错误。只需删除它。

使用此,简单明了:

^[a-zA-Z0-9][a-zA-Z0-9_-]{1,14}[a-zA-Z0-9]$

答案 1 :(得分:2)

使用lookarounds

^(?![_-])[a-zA-Z0-9_-]{3,16}(?<![_-])$

+

之后你也不需要{1,16}