preg_match不仅字母?

时间:2014-09-28 07:08:26

标签: php preg-match

我在这里和网上寻找解决方案。

问题是我只想加入字母。但是,如果我输入至少一个字母,无论是否有符号或数字,它都会接受它。如何获得字母?

if (!preg_match("/[a-zA-Z]/", $_POST["firstname"]))
    $error = "<br />PLease enter a valid first name";

4 个答案:

答案 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;
}