此代码仅允许使用字母数字字符,但我希望阻止$name
以数字开头。我该怎么做?
$name = "007_jamesbond";
if(preg_match('/[^a-z_\-0-9]/i', $name)){
echo "invalid name";
}
答案 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";
}
答案 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';
}
}