2015-10-03 40 views
-6

尋找紅寶石結束正則表達式匹配這些條件:紅寶石只有小寫字母,數字和破折號,至少一個字母串的正則表達式,不能啓動或以破折號

  • 只有瞬間哇,5個downvotes:小寫字母,數字和破折號
  • 至少一個字母
  • 不能啓動或以破折號結束

編輯。我不知道如何讓這更簡單。我需要一個允許字符串通過這些條件的正則表達式。很容易理解我說的話。你們到底怎麼回事?

因此,例如:

AAAAA - (失敗,資金)

33994 - (失敗,無字母)

333_3423 - (失敗,包含下劃線)

-AAA - (失敗,以短劃線開頭)

aaa- - (失敗以短劃線開頭)

AA8-d(成功)

aabsdg323-SDF(成功)

等等等等。

+0

什麼是你的問題? – sawa

+1

我怎麼能更清楚????!?!?你們不是程序員嗎?如此迷茫。 – gregblass

+0

感謝您在簡單,清晰和簡潔的問題上破壞我的聲譽。 – gregblass

回答

2

我想出了一個解決方案是將三項要求結合起來:

def subdomain_is_valid 
    message = "can only contain lowercase letters, numbers and dashes. It must contain at least one letter. It may not start or end with a dash." 

    # It can only contain lowercase letters, numbers and dashes 
    if !subdomain.match(/^[a-z0-9-]+$/) 
    errors.add(:subdomain, message) 

    # It must contain at least one letter 
    elsif !subdomain.match(/(?=.*[a-z])/) 
    errors.add(:subdomain, message) 

    # It may not start or end with a dash. 
    elsif !subdomain.match(/^[^-].*[^-]$/) 
    errors.add(:subdomain, message) 
    end 
end 
+0

1。我建議你使用'=〜',因爲返回值/類型不同,它比'match'快。 2.第一個和最後一個正則表達式可能會聯合起來......'/^[a-z0-9] [a-z0-9 \ - ] * [a-z0-9] $ /'...雖然他們不' t做你想做的(他們排除單個字符串:''s「'); 3.我認爲你的第二個條件可以得到優化......一旦你找到你想要的東西,就不需要繼續閱讀整個字符串。即'if subdomain =〜/ [a-z] /';我很高興你能找到適合你的東西。分享我們的代碼可以讓我們互相幫助。 – Myst

相關問題