Php 我如何告诉正则表达式匹配至少x个字母数字?

Php 我如何告诉正则表达式匹配至少x个字母数字?,php,regex,Php,Regex,我有用户提交字段的表单。字段可以有字母、数字和标点符号。但我想确认至少有3个字符是字母。我怎样才能注册呢 比如说, $string = "ab'c"; 我需要像这样的东西 if (preg_match("/[a-z]{3}/i", $string)) print "true"; else print "false"; 这个字符串有三个字母,尽管它有一个撇号。这应该是真的。但出于某种原因,目前的测试结果是错误的 有什么帮助吗?试试这个: $匹配字符串的结尾;) 编辑: 对不起

我有用户提交字段的表单。字段可以有字母、数字和标点符号。但我想确认至少有3个字符是字母。我怎样才能注册呢

比如说,

$string = "ab'c";
我需要像这样的东西

if (preg_match("/[a-z]{3}/i", $string))
    print "true";
else
    print "false";
这个字符串有三个字母,尽管它有一个撇号。这应该是真的。但出于某种原因,目前的测试结果是错误的

有什么帮助吗?

试试这个:
$
匹配字符串的结尾;)


编辑: 对不起,我误解了你的问题。试试这个:
^([a-zA-Z\']{3,}(.?)$

结果:
hell'o
您不能编写检查“至少x个类符号”的regexp。你当然可以

preg_match_all('~([a-z][^a-z]*){3}~', "ab'c")
在更复杂的情况下,您可以将该类替换为其他类,然后比较结果(或者只需使用preg_replace第四个参数):


请尝试以下正则表达式:

^([0-9,]*[A-Za-z]){3}[A-Za-z0-9,]*$
您还可以删除所有非字母字符并检查长度:

if (strlen(preg_replace('/[^A-Za-z]+/', '', $str)) >= 3) {
    // $str contains at least three letters
}

在以下位置进行不区分大小写的匹配如何:

([a-z][^a-z]*){3}

查找3组字母和任意数量的非字母。

如果至少有3个字母,我希望它测试为true。所以所有这些hell0的例子我都想证明是真的。?您所做的只是将上下替换为原来的下(我很确定“/I”已经处理了)。无论如何,“hell'o”和“hell0”“满足条件。@paxdiablo:不,我添加了$符号以匹配字符串的结尾@哦,我想我误解了你的问题,我以为你想在字符串末尾匹配3个字母数字字符。。。对不起,是的,我一秒钟前就想到了。我可以去掉除了字母以外的所有东西,然后检查字符串长度是否超过3。谢谢。我想我们赢了!:D非常感谢。让
*
不贪婪可能会稍微有效一些。。。耸耸肩。如果表现很重要,一个不贪婪的量词可能会让想法变得更糟,而不是更好。占有式肯定会更有效--
([A-z][^A-z]*+){3}
--但我们讨论的是验证用户输入,因此性能不是一个合理的问题。
if (strlen(preg_replace('/[^A-Za-z]+/', '', $str)) >= 3) {
    // $str contains at least three letters
}
([a-z][^a-z]*){3}