正则表达式只允许字母,单个空格和“ - ”

时间:2015-01-06 15:49:59

标签: php regex

我正在尝试创建一个函数来验证我的应用程序中的名称。有效名称可以包含大写和小写的字母,也可以包含-

<?php
function ValidateName($input) {
    if(!preg_match("/[^a-zA-Z- ]/",$input)) {
        return "The name is invalid";
    } else { return $input;}
}

$name = "Joe Dow";
echo ValidateName($name);
?>

它仍然输出名称无效。我认为这里的正则表达式必定是错误的。我还要将任意多个空格转换为单个空格

3 个答案:

答案 0 :(得分:2)

preg_match("/^[a-zA-Z -]+$/",$input)

猜猜你需要这个。试试这个验证而不是拒绝匹配。如果匹配则这是有效的。

答案 1 :(得分:1)

将此更改为/[^a-zA-Z- ]//[^a-zA-Z -]+/

问题很可能是-没有结束。

答案 2 :(得分:0)

你的正则表达式需要在字符类的开头或结尾都有未转义的连字符

/[^a-zA-Z -]/

你也有条件逆转,你的代码可以是:

if(!preg_match('/^[a-zA-Z -]+$/', $input)) { 
   return "The name is invalid";  
} else {
   return $input;
}