2016-12-15 188 views
0

我想在Ruby中驗證二級域名(在.com之前和https://之後的所有內容),以便我可以將它傳遞到我的namecheap api請求中。這裏是我到目前爲止,但我不熟悉的正則表達式只有字母,數字,破折號的正則表達式?

validates_format_of :sld, with: [a-zA-Z0-9-] 
  • 不允許有空格
  • 沒有特殊字符允許
  • 然而,破折號允許
  • 不能以破折號開始
  • 不能用破折號結束

我知道大寫CHARAC ters不能在域名中工作,但我不想讓用戶再次輸入他們的文本。我會壓縮用戶輸入並在下一頁顯示一條Flash消息。

+1

最少有多少個字符? – Laurel

+0

最少1個字符,最多63個字符'presence:true,maximum:63,' – HashRocketSyntax

+0

*我知道大寫字符在域名*中不起作用。你錯了,域名不區分大小寫。 – Barmar

回答

0

如何

validates_format_of :sld, with: /\A[a-z\d][a-z\d-]*[a-z\d]\z/i 

說明:

  • \A - 比賽開始字符串的
  • [a-z\d] - 匹配從AZ一次
  • [a-z\d-]任何字母或數字從0-9 - 匹配來自az的任何字母,數字0-9,或破折號零次或多次
  • [a-z\d] - 匹配從AZ 0-9 任何字母或數字,一旦
  • \z - 匹配字符串的結尾
  • i標誌 - 產生匹配不區分大小寫

注意:這隻適用於長度爲2或更長的字符串。如果你需要支持單字符輸入,我只會寫一個檢查字符串長度的方法,如果它是單個字符,確保它不是破折號。如果它超過2個字符,用這個正則表達式驗證它。

0

這可能會工作:

^[0-9A-Za-z](|[-0-9A-Za-z]{0,61}[0-9A-Za-z])$ 
  • 你的字符串需要啓動一個字母([0-9A-Za-z]
  • 然後,有兩個選擇((|[-0-9A-Za-z]{0,61}[0-9A-Za-z])):

    • 結束字符串
    • 0到61之間的字母數字或短劃線c其次是字母數字字符。(最多63個字符)
  • ^$是錨

+0

謝謝!一旦我解決了我的其他錯誤,我會給這個鏡頭。 – HashRocketSyntax

0
validates :sld, format: { with: /^(?!-)[-\w\d]{,63}(?<!-)$/i } 

您可以在http://rubular.com/

  • ^(?!-)試試你的正則表達式 - 負前瞻:不能以破折號開頭
  • [-\w\d] - 匹配詞語\w,數字\d,或破折號-
  • {,63} - 匹配必須在1和63個字符之間
  • (?<!-)$ - 負回顧後:不能以破折號結束
  • /i - 不區分大小寫
相關問題