【问题标题】:PHP regex for name verification用于名称验证的 PHP 正则表达式
【发布时间】:2016-05-29 12:20:10
【问题描述】:

所以我有这个任务。 我必须验证可以包含大小写字母、撇号、空格或逗号的名称输入。 所以我想出了这个进行验证:

$name = $_POST['your_name'];
$regex_name = '/([A-Z]|[a-z])([A-Z][a-z\s])+/';
if (!preg_match($regex_name, $name)) {
    echo '<span style="color:red">Please input a valid name!</span><br />';
}

但它似乎不能正常工作,我不知道为什么。

我已阅读有关正则表达式和规则的信息,但我不明白我做错了什么。我什至在 stackoverflow 上看到了一些示例,但我仍然不清楚。

我认为这应该至少验证字母,但即使对于简单的输入“错误”,它也会给出错误。

请帮忙!

【问题讨论】:

  • 使用 1 个字符类,其中包含您允许的范围/符号。使用锚点,使用量词。
  • php regex validation的可能重复

标签: php regex


【解决方案1】:

说明

^[a-zA-Z'\s,]+$

此正则表达式将执行以下操作:

  • 验证给定的字符串只有:
    • 大写字母
    • 小写字母
    • 空格
    • 逗号
    • 撇号

在字符类中,我同时包含了a-zA-Z,并且在示例中我启用了不区分大小写的标志。所以这有点多余。

示例

现场演示

https://regex101.com/r/rM2iU3/2

示例文本

aaaaaaa
bbbb,bbbb
cccc cccc
ddd'ddddd
fff3ffff
gggggggg

示例匹配

aaaaaaa
bbbb,bbbb
cccc cccc
ddd'ddddd
gggggggg

说明

NODE                     EXPLANATION
----------------------------------------------------------------------
  ^                        the beginning of a "line"
----------------------------------------------------------------------
  [a-zA-Z'\s,]+            any character of: 'a' to 'z', 'A' to 'Z',
                           ''', whitespace (\n, \r, \t, \f, and " "),
                           ',' (1 or more times (matching the most
                           amount possible))
----------------------------------------------------------------------
  $                        before an optional \n, and the end of a
                           "line"
----------------------------------------------------------------------

【讨论】:

    【解决方案2】:

    “不能正常工作”不是一个有用的描述。但我猜你的问题很可能是你没有用字符串开头(^)和字符串结尾($)来锚定你的查询。这意味着您只匹配字符串中任意位置的字符子集。

    另外,您在问题中没有这么说,但在您的代码中,您似乎只想允许第一个字符使用字母。这应该可以为您解决问题:

    $name = $_POST['your_name'];
    $regex_name = "/^[a-z][a-z,' ]+$/i";
    if (!preg_match($regex_name, $name)) {
        echo '<span style="color:red">Please input a valid name!</span><br />';
    }
    

    我还在表达式末尾使用了i 修饰符来使搜索不区分大小写。

    【讨论】:

    • 非常感谢!这行得通。我也从所有的 cmets 那里学到和理解了更多的正则表达式,所以谢谢大家的回答!
    【解决方案3】:

    [a-zA-z,' ]

    我选择不使用 \s,因为您只指定了空格,而不是任何空白字符。

    这是动态调试正则表达式的好工具。

    Rubular

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多