如何在PHP中验证爱尔兰姓氏

时间:2015-01-04 21:18:05

标签: php

我正在借用w3schools.com的代码来验证名称。不幸的是,正则表达式只允许字母和空格。如何修改此代码,以便像O'Shaughnessy这样的名称不会产生错误消息?另外,我的一般代码的另一部分是导致用户输入出现在MySQL上,反斜杠是不打算的。我曾使用mysqli_real_escape_string来防止SQL注入攻击,我相信这就是为什么反斜杠出现在数据中的原因。我该如何摆脱它?

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

1 个答案:

答案 0 :(得分:1)

打击SQL注入的最佳方法是完全抛弃mysqli_real_escape_string并使用预处理语句。这样,您不必担心清理字符串,直到之后想要显示它们。准备好的语句可以与mysqliPDO一起使用,实质上意味着您可以单独发送查询和数据。这意味着用户无法更改您的查询。

至于名字;首先考虑一下你是否真的要验证它。有一些奇怪的名字,验证它们在大多数时候并不是很有用。不过,如果这是你想要的方式,你所要做的就是确保'包含在你的正则表达式中。像这样:

<强>原始

/^[a-zA-Z ]*$/

<强>编辑:

/^[a-zA-Z' ]*$/

那就是它。一个小的补充,然后你是金色的。而且你会以他们的名字惹恼变形虫的人。或数字。