【问题标题】:Regex for people names PHP [duplicate]人名PHP的正则表达式[重复]
【发布时间】:2016-09-15 08:27:59
【问题描述】:

我正在使用这个正则表达式来确保名称只能包含字母、撇号或连字符。

Validator::extend('people_names', function($attribute, $value, $parameters, $validator) {
        return preg_match("^[a-zA-Z-'\s]+$^", $value);

当我使用此tool 检查正则表达式是否正确时,它显示其正确,但在我的表单中,当我测试以数字或任何其他字符(如123name#$#$name)开头的输入时,它会通过而它不应该。包含字母和数字的输入,如name123 被拒绝。

【问题讨论】:

标签: php regex laravel validation


【解决方案1】:

PHP 的preg_ 函数需要以/^ 开头并以$/ 结尾。

试试这个:

preg_match("/^[a-zA-Z-'\s]+$/", $value);

【讨论】:

  • 在 PHP 中,您不必/^ 开头并以$/ 结尾,只需preg_ 函数需要正则表达式分隔符。
  • ^$正则表达式锚,它们是 模式 的一部分,正则表达式分隔符是 / 前导和尾随符号在这里。
【解决方案2】:

在您的正则表达式^[a-zA-Z-'\s]+$^ 中,您只是在末尾使用$ 检查字符串是否以字母结尾,但开头的^ 在这里用作正则表达式分隔符,因为它也在结束。

我建议使用另一个字符串分隔符,例如 #/

preg_match("#^[a-zA-Z-'\s]+$#", $value) 应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多