php - 在 PHP 中使用正则表达式来验证名称
问题描述
在这里,我想验证一个名称:
名称仅由这些字符 [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
推荐阅读
- parsing - 位串到十进制整数的转换
- sql - 如何在 SQL Server 中聚合客户数量?
- visual-c++ - 由于 C2220 错误,MSBuild 编译失败
- apache-spark - hadoop:HDFS中存储数据的格式
- c++ - 如何将 wstring 转换为 LPWSTR 数组?(C++)
- reactjs - 将 Jest runner 与使用 create-react-app 创建的 react 应用程序集成
- javascript - 表 Vuetify 中的动态字段
- kubernetes - 如何将基于 TCP 的负载均衡器设置为 Cloud CDN 的来源?
- python - 如何使用opencv在彩色图像和灰度图像之间进行分类?
- angularjs - nodejs pbkdf2sync TypeError:密码短语必须是缓冲区