簡體   English   中英

用於名稱驗證的唯一正則表達式

[英]Unique regex for name validation

我想檢查的是正則表達式PHP是否有效的名稱,但我需要一個唯一的正則表達式,它可以:

  • 字母(大寫和小寫)
  • 空格(最多2個)

但是空格之間不能有空格。例如:名稱-> 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.

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