簡體   English   中英

PHP正則表達式用於名稱驗證

[英]PHP regex for name verification

所以我有這個任務。 我必須驗證名稱輸入,其中可以包含大小寫字母,撇號,空格或逗號。 所以我想出了這個來進行驗證:

$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的示例,但對我來說仍然不清楚。

我認為這至少應驗證字母,但即使對於簡單輸入“錯誤”,也會給出錯誤。

請幫忙!

描述

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

正則表達式可視化

此正則表達式將執行以下操作:

  • 驗證給定的字符串僅具有:
    • 大寫字母
    • 小寫字母
    • 空格
    • 逗號
    • 撇號

在字符類中,我同時包含了azAZ ,並且在示例中,我啟用了不區分大小寫的標志。 因此,這有點多余。

現場演示

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"
----------------------------------------------------------------------

[a-zA-z,' ]

我選擇不使用\\ s,因為您僅指定空格,而不指定任何空格字符。

這是即時調試正則表達式的好工具。

紅寶石

“工作不正常”不是有用的描述。 但是我想您的問題可能是您沒有使用字符串的開頭( ^ )和字符串的結尾( $ )來錨定查詢。 這意味着您只匹配字符串中任意位置的一部分字符。

另外,您在問題中沒有這樣說,但是在您的代碼中,您似乎只希望第一個字符為字母。 這應該為您解決問題:

$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修飾符,使搜索不區分大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM