在PHP中使用正则表达式来验证名称

问题描述 投票:0回答:1

我想在这里验证名称:

名称仅包含以下字符[a-zA-Z-'\ s]但是,不能存在两个或多个连字符或撇号的序列名称也应该以字母开头。

我尝试过

$name = preg_match("/^[a-zA-Z][a-zA-Z'\s-]{1,20}$/", $name);

但是它允许双连字符和撇号。如果可以帮助谢谢]

php regex
1个回答
1
投票

您可以使用否定先行使包含两个或多个字符连字符和撇号的序列的名称无效:

(?!.*['-]{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

Demo on 3v4l.org

© www.soinside.com 2019 - 2024. All rights reserved.