我想在这里验证名称:
名称仅包含以下字符[a-zA-Z-'\ s]但是,不能存在两个或多个连字符或撇号的序列名称也应该以字母开头。
我尝试过
$name = preg_match("/^[a-zA-Z][a-zA-Z'\s-]{1,20}$/", $name);
但是它允许双连字符和撇号。如果可以帮助谢谢]
您可以使用否定先行使包含两个或多个字符连字符和撇号的序列的名称无效:
(?!.*['-]{2})
例如
$names = array('Mike Cannon-Brookes', "Bill O'Hara-Jones", "Jane O'-Reilly", "Mary Smythe-'Fawkes");
foreach ($names as $name) {
$name_valid = preg_match("/^(?!.*['-]{2})[a-zA-Z][a-zA-Z'\s-]{1,20}$/", $name);
echo "$name is " . (($name_valid) ? "valid" : "not valid") . "\n";
}
输出:
Mike Cannon-Brookes is valid
Bill O'Hara-Jones is valid
Jane O'-Reilly is not valid
Mary Smythe-'Fawkes is not valid