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