PHP preg_match只有字母而没有数字,也许是解释

时间:2014-12-13 14:45:41

标签: php regex preg-match

我有这个电子邮件正则表达式,我想用名称正则表达式做同样的事情,所以你不能用名字写数字,我应该怎么改变它?

if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) {
    $emailError = 'You entered an invalid email address.';
    $hasError = true;
}

我知道[a-z0-9 _.-]表示a-z 0-9和_。 - 可以使用。 但我想只使用a-z,这就是为什么我的大脑正在突破,因为我不理解整个句子,任何人都可以翻译"它只使用a-z而且没有数字__。? 我希望将其更改为名称正则表达式,这样人们就无法在其名称中写入数字。

我明白我可以写

if (!preg_match("/^[[:alnum:]][a-z]*@[a-z]+\.[a-z]{2,4}$/i", trim($_POST['name']))) {
    $nameError = 'You entered invalid characters in your name.';
    $hasError = true;
}

但是对我来说它没有任何意义,我应该如何进入上面的正则表达式。

但我也可以输入这个?所以我说如果它包含0-9然后它无效?但我不知道句子中所有这些字符的含义。

if (preg_match("/^[[:alnum:]][0-9]*@[0-9]+\.[0-9]{2,4}$/i", trim($_POST['name']))) {
    $nameError = 'You entered invalid characters in your name.';
    $hasError = true;
}


我试着研究" preg_match"但我无法找到解释,所以我可以为#34; preg_match"制作一个正则表达式。在我自己的

2 个答案:

答案 0 :(得分:1)

您可以尝试下面的内容。

/^[a-z]+@[a-z]+\.[a-z]{2,4}$/i
  • [[:alnum:]]匹配字母和数字,但POSIX [[:alpha:]]仅匹配字母。
  • [a-z]*零个或多个小写字母。 [a-z]+一个或多个小写字母。
  • i修饰符有助于进行不区分大小写的匹配。

答案 1 :(得分:0)

如果您想了解正则表达式模式,请尝试使用http://regex101.com。这将让您分析模式的每个部分。

你可以尝试使用它,它应该做的工作:

/^[[:alpha:]][a-z]*@[a-z]+\.[a-z]{2,4}$/i

但是我使用的名称检查的简单正则表达式并没有任何问题:

/^([a-z])+$/i

虽然第一个可能更好(?),但第二个使得正则表达式在我看来更容易理解。