使用preg_match()防止数字成为字符串中的第一个字符

时间:2015-08-17 02:32:00

标签: php regex

此代码仅允许使用字母数字字符,但我希望阻止$name以数字开头。我该怎么做?

$name = "007_jamesbond";

if(preg_match('/[^a-z_\-0-9]/i', $name)){
 echo "invalid name";
}

4 个答案:

答案 0 :(得分:2)

这应该这样做。此外,\w是字母数字字符和下划线。

$name = "007\_jamesbond";
if(preg_match('/(^\d|[^\-\w])/', $name)){
    echo "invalid name";
}

输出:

  

无效名称

Regex101演示:https://regex101.com/r/dF0zQ1/1

<强>更新

还应考虑小数和负数......

$name = "007\_jamesbond";
if(preg_match('/(^[.\-]?\d|[^\-\w])/', $name)){
    echo "invalid name";
}

演示:https://regex101.com/r/dF0zQ1/2

答案 1 :(得分:1)

有效的模式定义模式可能更清楚,并检查匹配的模式。

if(!preg_match('/^[a-z][a-z_\-0-9]*/i', $name)){
   echo "invalid name";
}

//               ^                    anchor to beginning of string
//                 [a-z]              a letter (add underscore here if it's ok too)
//                      [a-z_\-0-9]*  any number of alphanumeric+underscore characters

答案 2 :(得分:0)

$name = "007_jamesbond";

if(preg_match('/^[^a-z]/i', $name)){
    echo "invalid name";
}

正则表达式开头的^表示&#34;字符串的开头&#34;。此正则表达式可以理解为:&#34;如果$name开头(^)的字符不是az([^a-z]),则它无效。&#34;

如果您希望单个正则表达式符合两个要求(&#34;只有alphanum,不以非字母&#34开头;),您可以使用:

/(^[^a-z]|[^\w\-])/

答案 3 :(得分:-1)

试试这个:(不使用正则表达式)

$first = substr($name, 0,1);
if(is_numeric($first))
{
    echo 'the first character cannot be numeric';
}
else
{
    if(preg_match('/[^a-z_\-0-9]/i', $name))
    {
        echo 'invalid name';
    }
}