2014-09-28 82 views
0

我已经在这里和在线寻找解决方案。preg_match字母不仅字母?

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

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

可能重复[我如何检查表单POST只包含使用preg \ _match多个字段上的字母](http://stackoverflow.com/questions/7828684/如何-可以-I-签一个外形后仅-CONT ains-letters-on-multiple-fields-using-preg) – 2014-09-28 07:52:39

+0

我试过了,它不起作用,这就是为什么我问。那一个仍然让我输入数字并接受 – Anthony 2014-09-28 08:18:44

回答

3

使用/^[a-zA-Z]+$/代替/[a-zA-Z]/

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

正则表达式的说明:

  • ^ - 要匹配的字符串的开始。
  • [] - 匹配允许的字符。
  • + - 匹配一个或多个相同类型的字符。
  • $ - 匹配字符串的结尾。
0

Anchor你的匹配。看到这个代码:

if (!preg_match("/^[a-zA-Z]+$/", $_POST["firstname"])) 
    $error = "<br />PLease enter a valid first name"; 
  • ^$断言THES挞,比赛结束。

PS您的代码中可能拼写错了“Please” - “L”在大写字母中。

-1

那么,我不是一个正则表达式专家,但你可以创建一个函数,将精确检查你需要什么。它会去的地方沿着这些线路(该功能仅适用于较低的情况下,检查虽然):

$w = "hereisastr"; 
$i = 0; 
while (isset($w[$i])) 
{ 
    if ($w[$i] >= 'a' && $w[$i] <= 'z') 
    { 
    $i++; 
    } else 
    { 
    return false; 
    break; 
    } 
    return true; 
} 
+1

你好,我只是在这里给提示,我不想把它全部带走...... – bastienbot 2014-09-28 07:23:56

0

为了对付unicode的,你可以使用:

if (!preg_match("/^[- '\p{L}]+$/u", $_POST["firstname"])) 
    $error = "<br />PLease enter a valid first name"; 

我已经添加了/u修改器的Unicode和字符- '匹配名字像Jean-François

相关问题