2017-10-18 137 views
-1

我不擅長構建正則表達式。 這就是爲什麼我問你! :)字母範圍內的姓氏正則表達式

因此,即時通訊與立爲姓氏的開頭,例如字母範圍工作:

1: X-Y 
2: Ki-Kj 
3: Al-Bkz 

範圍都代表一個特定的過程,這就是爲什麼我需要知道哪些正則表達式擬合姓氏。

姓氏「Albert」適合正則表達式#3,「Kioto」適合於#2。 我希望這對你有意義。

正則表達式還需要足夠複雜才能處理像「Bauer-Schmidt」這樣的範圍。

我真的很需要你的幫助!

+0

真的不是一個正則表達式問題...您應該使用簡單的字符串比較每個區間的上限和下限。 – CBroe

+0

但是我怎樣才能比較定義的參數之間的範圍?例如「Ab-De」。我如何比較以「Co」開頭的姓氏? – h00ligan

+0

您能詳細說明一下您需要的嗎?您是否需要過濾所有以幾個字母開頭並以幾個字母結尾的姓氏,請更新您的問題 – msoliman

回答

1

真的不是你應該首先使用正則表達式的問題...使用簡單的字符串比較每個間隔的上限和下限。

function check_name_in_range($name) { 
    $ranges = [ 
    1 => ['X', 'Y'], 
    2 => ['Ki', 'Kj'], 
    3 => ['Al', 'Bkz'], 
    ]; 
    foreach($ranges as $rangeNum => $range) { 
    if(substr($name, 0, strlen($range[0])) >= $range[0] && 
     substr($name, 0, strlen($range[1])) <= $range[1]) { 
     return $name. ' falls into range ' . $rangeNum; 
    } 
    } 
    return $name. ' does not fall into any range'; 
} 

var_dump(
    check_name_in_range('Albert'), 
    check_name_in_range('Kjooto'), 
    check_name_in_range('FitsEffAll') 
); 

你可能婉比較之前爲小寫字母所有相關的字符串,使A/a不會成爲一個問題,因爲這些相等。

+0

如果我的範圍只包含開始「Alz」,這是否也工作? 或者這也給我的名字「按鈕」是> =阿爾茨,但不符合規則。 – h00ligan

+0

你的意思是隻有一個邊界的範圍,所以在相應的數組條目中只有一個元素?不,那不行,除非你修改代碼來檢查。但你真的需要嗎?如果你想抓住每一個更大的東西,比如在一定範圍內說'Foo' - 那麼你可以簡單地把'Z'作爲上邊界。 – CBroe

+0

如果我把姓氏「Kjooto」,應該適合「Ki-Kj」您的代碼不起作用。 – h00ligan

0

我不知道你問什麼了,但我瞭解做這樣

[a-zA-Z]{2} 

這會給你喜歡艾伯特人。 如果你只想要大寫字母,則:

[A-Z]{2} 

請自由評論你到底想要什麼。 謝謝

相關問題