[英]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,]+$
此正則表達式將執行以下操作:
在字符類中,我同時包含了az
和AZ
,並且在示例中,我啟用了不區分大小寫的標志。 因此,這有點多余。
現場演示
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"
----------------------------------------------------------------------
“工作不正常”不是有用的描述。 但是我想您的問題可能是您沒有使用字符串的開頭( ^
)和字符串的結尾( $
)來錨定查詢。 這意味着您只匹配字符串中任意位置的一部分字符。
另外,您在問題中沒有這樣說,但是在您的代碼中,您似乎只希望第一個字符為字母。 這應該為您解決問題:
$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.