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

时间:2010-03-13 15:21:52

标签: php regex

我有用户提交字段的表单。字段可以包含字母,数字和标点符号。但我想检查以确保至少有3个字符是字母。我怎么能正则表达式?

例如,

$string = "ab'c";

我需要类似的东西,

if (preg_match("/[a-z]{3}/i", $string))
    print "true";
else
    print "false";

该字符串有三个字母,即使它有撇号。它应该测试真实。但出于某种原因,现在测试结果是假的。

任何帮助?

4 个答案:

答案 0 :(得分:3)

对不区分大小写的匹配如何:

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

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

答案 1 :(得分:1)

你不能编写一个检查“至少x类符号”的正则表达式。当然你可以

preg_match_all('~([a-z][^a-z]*){3}~', "ab'c")

在更复杂的情况下,您可以将类替换为其他内容,然后比较结果(或者只使用preg_replace第四个参数):

preg_replace('~[a-z]~', '', "ab'c", -1, $count);
print_r($count); // prints "3"

答案 2 :(得分:1)

试试这个正则表达式:

^([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
}

答案 3 :(得分:0)

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

if (preg_match("/[a-zA-Z\']{3}$/i", $string))
    print "true";
else
    print "false"; 

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

结果:
hell'o< - 真实 h31l0< - false
hello< - true