PHP正则表达式 - 字符类

时间:2014-12-27 20:47:32

标签: php regex

我想知道一些关于PHP字符的内容,我相信我还没有完全理解。让我们从w3schools.com获取这段代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
    $nameErr = "name is required";
    } else {
        $name = test_input($_POST["name"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
            $name = "";
            $nameErr = "Only letters and white space allowed";
        }
    }
}

假设第三个“if”条件的右方括号旁边的星号不存在。换句话说,你不会有“零次或多次”,而只是“一次”。

我的问题是:

  • 如果我输入像Jason这样的名字,我会看到错误信息吗?
  • 缺少*符号是否意味着字符类只能与一个字母匹配?
  • 也就是说,如果我只是将J输入文本字段而不是Jason,那么输入是否会打印出来?

我无法在w3schools.com上测试它,因为观看者无法更改源代码。我使用在线正则表达式检查器http://www.regexr.comand - 当我输入代码“/([a-zA-Z])/”并对着字符串Jason进行测试时,所有字符都匹配!情况并非如此。我应该得到一个假的。

2 个答案:

答案 0 :(得分:1)

如果您删除了^$标记,则您的规则会说“在某个地方有一封信”。 Jason符合这一点。

答案 1 :(得分:1)

^标记表示“字符串的开头”,$表示“字符串的结尾”。

删除星号表示“Jason”不匹配,但“J”将匹配。

您可以在PHP manual中找到PCRE正则表达式模式的参考。

如果您无法在本地运行代码进行测试,您仍然可以在PHP Fiddle中运行代码段。我建议你玩example patterns in the manual