2011-10-25 37 views
5

我必須檢查用戶輸入以確保名稱,姓氏(等等)輸入正確且有效。我要建立一個檢查,如果用戶輸入重複字母的第一個名字一個正則表達式,姓氏等..在PHP中捕獲重複字母 - 正則表達式

例子:

  • AAAron =壞,因爲3 A的
  • 亞倫=好
  • 漢娜=因爲3 N的

  • Hannnah =壞是否有一個PHP正則表達式來捕捉這些情況S' (我有一個基本的正則表達式的知識,但這對我來說太多)

    編輯: 這應該允許數字以及大衛3或III

    感謝

  • +8

    你是誰,來驗證拼寫某人的名字? :) –

    +0

    這真的有必要嗎?應該不需要做比驗證​​更長的名字。如果用戶不想寫他自己的名字,他可以寫下任何有效的東西,比如「John Doe」。相反,您的正則表達式最終可能會使一些更稀有/異乎尋常的名稱失效。我不會這樣做。 –

    +1

    [我怎樣才能找到重複的字母與Perl的正則表達式?](http://stackoverflow.com/questions/178837/how-can-i-find-repeated-letters-with-a-perl-regex) – breiti

    回答

    14

    您可以使用反向引用的那個目的。

    preg_match('/(\w)(\1+)/', $subject, $matches); 
    print_r($matches); 
    

    \1裝置重複第一捕獲,從而在這種情況下\w

    就你的例子而言,我不認爲使用正則表達式是最好的解決方案,爲什麼不計算任何字符的實例數呢?

    $charCountArray = array(); 
    foreach ($name as $char) { 
        $charCountArray[$char]++; 
    } 
    

    回參考是一種先進的功能,幸運的是PCRE功能支持它。

    注:preg_match將匹配只有一個序列,如果你需要知道的所有比賽,請使用preg_match_all

    +0

    非常好謝謝 – Tech4Wilco

    5

    試試這個正則表達式:

    /(\w)\1{2}/