我在这里和网上寻找解决方案。
问题是我只想加入字母。但是,如果我输入至少一个字母,无论是否有符号或数字,它都会接受它。如何获得仅字母?
if (!preg_match("/[a-zA-Z]/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
答案 0 :(得分:3)
使用/^[a-zA-Z]+$/
代替/[a-zA-Z]/
:
if (!preg_match("/^[a-zA-Z]+$/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
正则表达式的解释:
^
- 匹配字符串的开头。[]
- 匹配允许的字符。+
- 匹配同一类型的一个或多个字符。$
- 匹配字符串的结尾。答案 1 :(得分:0)
锚定您的匹配。看到这段代码:
if ( !preg_match("/^[a-zA-Z]+$/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
^
和$
声明了比赛的结果和结束。PS你可能拼写错误了#34;请&#34;在你的代码中 - &#34; L&#34;是封顶。
答案 2 :(得分:0)
为了处理unicode,你可以使用:
if (!preg_match("/^[- '\p{L}]+$/u", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
我为unicode和字符/u
添加了- '
修饰符,用于匹配Jean-François
答案 3 :(得分:-1)
好吧,我不是正则表达式专家,但你可以创建一个能够准确检查你需要的函数。它会沿着这些方向前进(虽然该函数仅检查较小的情况):
$w = "hereisastr";
$i = 0;
while (isset($w[$i]))
{
if ($w[$i] >= 'a' && $w[$i] <= 'z')
{
$i++;
} else
{
return false;
break;
}
return true;
}