preg_match模式检查字符串是否只包含字母、空格和句点


preg_match pattern check that strin contain only letters,whitespace and dot

下面的代码显示了一种检查名称字段是否只包含字母和空格的简单方法。如果名称字段的值无效,则存储错误消息:

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

我的问题是如何在这里添加点(.)?

交换此行:

if (!preg_match("/^[a-zA-Z ]*$/",$name))

这行:

if (!preg_match("/^[a-zA-Z'. ]*$/", $name))

您必须转义.字符,因为它在正则表达式中具有特殊含义。

$pattern = "/^[a-zA-Z '.]*$/";

您总是可以添加一个。方括号中。例如,表达式[a-zA-Z]是正确的,它会给你想要的东西,即要检查的字符列表。如果你想检查。在[]之外,然后逃离。喜欢此外,您的代码不会检查制表符,因为制表符是空白的。因此,您应该添加''s而不是"。同样,还有很多其他特殊的角色,比如?这些字符将被视为[]括号中的正常字符。一个例外是-,它必须始终添加在末尾,即[A-Z?-]。然而,仍有一些特殊字符必须转义,如"/。我的建议是,在将表达式插入代码之前,先在线运行表达式进行检查。Regex错误非常常见,很难找到。您的表达式应该是:-

 $name = test_input($_POST["name"]);
 if (!preg_match("/^[a-zA-Z.'s]+$/",$name)) {
 $nameErr = "Only letters and white space allowed"; 
 }

干杯!