[英]Unique regex for name validation
我想檢查的是正則表達式PHP是否有效的名稱,但我需要一個唯一的正則表達式,它可以:
但是空格之間不能有空格。例如:名稱-> Dennis Unge Shishic(有效)名稱-> Denis(空格)(空格)(無效)
希望你們能理解我,謝謝:)
首先,值得一提的是,對人名制定如此嚴格的規定是一個非常糟糕的主意 。 但是,如果必須的話,像這樣的簡單字符類將限制您使用大寫和小寫英文字母:
[A-Za-z]
要匹配一個或多個,您需要在其后添加+
。 因此,這將與名稱的第一部分匹配:
[A-Za-z]+
要捕獲第二個名稱,您只需要做同樣的事情,並在其前加一個空格即可,因此類似這樣的操作將捕獲兩個名稱:
[A-Za-z]+ [A-Za-z]+
要使第二個名稱為可選,您需要將其用括號括起來並添加一個?
之后,像這樣:
[A-Za-z]+( [A-Za-z]+)?
要添加第三個名稱,您只需要再次執行一次即可:
[A-Za-z]+( [A-Za-z]+)? [A-Za-z]+
或者,您可以指定后者的名稱可以重復1到2次,如下所示:
[A-Za-z]+( [A-Za-z]+){1,2}
為了使結果代碼易於理解和維護,您可以使用兩個Regex。 一次檢查(要求為真)僅使用允許的字符^[a-zA-Z ]+$
,然后另一次檢查(要求為假)沒有兩個(或更多)相鄰空格( ){2,}
嘗試以下工作代碼:
將輸入更改為您要測試的任何內容,並查看正確的驗證結果
<?php
$input_line = "Abhishek Gupta";
preg_match("/[a-zA-Z ]+/", $input_line, $nameMatch);
preg_match("/\s{2,}/", $input_line, $multiSpace);
var_dump($nameMatch);
var_dump($multiSpace);
if(count($nameMatch)>0){
if(count($multiSpace)>0){
echo "Invalid Name Multispace";
}
else{
echo "Valid Name";
}
}
else{
echo "Invalid Name";
}
?>
在PHP中,僅由Unicode字母組成的一到三個單詞的正則表達式看起來像
/^\p{L}+(?:\h\p{L}+){1,2}\z/u
描述:
^
-字符串開始 \\p{L}+
-一個或多個Unicode字母 (?:\\h\\p{L}+){1,2}
-一個或兩個水平空白序列,后跟一個或多個Unicode字母 \\z
字符串的結尾,甚至不允許美元錨點允許的尾隨換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.