我想驗證一個表單輸入以便http://和www不被允許。哪個REGEX可以工作?rails驗證www和http的正則表達式
例如:
允許
google.com
不允許
- www.google.com
- http://google.com
- http://www.google.com
MODEL
VALID_DOMAIN_REGEX = ???
驗證:域名,格式爲:{有:VALID_DOMAIN_REGEX}
我想驗證一個表單輸入以便http://和www不被允許。哪個REGEX可以工作?rails驗證www和http的正則表達式
例如:
允許
google.com
不允許
MODEL
VALID_DOMAIN_REGEX = ???
驗證:域名,格式爲:{有:VALID_DOMAIN_REGEX}
由於http://
包含這麼多for ward斜槓,這對於Ruby的%r正則表達式語法來說非常有用。
def has_forbidden_prefix?(string)
string =~ %r{^(http://|www)}
end
這將返回nil,falsy,如果字符串不http://
或www
啓動。
如果字符串的話,它將返回0,truthy(第一個匹配的偏移量)。
您可以使用validate :some_method_name
調用自定義的驗證方法的模型,我可以按如下方式構建它
model MyThing
validate :no_forbidden_prefix
private
def has_forbidden_prefix?(string)
string =~ %r{^(http://|www)}
end
def no_forbidden_prefix
if has_forbidden_prefix?(uri)
errors.add :domain, 'The URI cannot start with "http://" or "www"'
end
end
end
這應該爲你做它:
/^[http\:\/\/|www].*/
例如:
1.9.2p320 :007 > "http://www.google.de".match /^[http\:\/\/|www].*/
=> #<MatchData "http://www.google.de">
1.9.2p320 :008 > "www.google.de".match /^[http\:\/\/|www].*/
=> #<MatchData "www.google.de">
1.9.2p320 :009 > "google.de".match /^[http\:\/\/|www].*/
=> nil
因此,如果有效doenst比賽爲您的目的...
'[HTTP \:\/\/| WWW]'是一個字符類,也許你打算使用分組? – toro2k
謝謝,但是當我做類似這樣的事情時,它不起作用:「www.google.com」.sub(/^[http \:\/\/| www] ./,「」)=>「w。 google.com「 – crispychicken
@ toro2k是的,我需要使用分組 – crispychicken
謝謝,我編輯了我的問題。我如何在您的模型中包含您的解決方案? – crispychicken
我已經擴展了我的解決方案以提供示例實現,我發現使用私有方法的自定義驗證更具可讀性,但這僅僅是我的看法。 :) –
未定義的本地變量或方法'uri' – crispychicken