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

Php 防止数字成为preg_match()字符串中的第一个字符,php,regex,Php,Regex,此代码只允许字母数字字符,但我想防止$name以数字开头。我该怎么做 $name = "007_jamesbond"; if(preg_match('/[^a-z_\-0-9]/i', $name)){ echo "invalid name"; } 试试这个:(不使用正则表达式) 这应该可以做到。另外,\w是字母数字字符和下划线 $name = "007\_jamesbond"; if(preg_match('/(^\d|[^\-\w])/', $name)){ echo "inv

此代码只允许字母数字字符,但我想防止
$name
以数字开头。我该怎么做

$name = "007_jamesbond";

if(preg_match('/[^a-z_\-0-9]/i', $name)){
 echo "invalid name";
}
试试这个:(不使用正则表达式)


这应该可以做到。另外,
\w
是字母数字字符和下划线

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

无效名称

Regex101演示:

更新

也应该考虑小数和负数

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

正则表达式开头的
^
表示“字符串的开头”。该正则表达式可以理解为:“如果
$name
以非a-z(
[^a-z]
)字符开头(
^
),则该正则表达式无效。”

如果希望一个正则表达式同时满足这两个要求(“仅alphanum,不以非字母开头”),可以使用:

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

为有效的内容定义一个模式,并检查与之不匹配的内容,可能会更清楚

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

我同意你的第一个版本。它不允许小数或负数。我还将其修改为不允许连字符。
/(^[^a-z]|[^\w\-])/
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