使用Ruby/RoR - year是模型/視圖中的字符串。我如何驗證用戶輸入的字符串是有效的公曆年?如何驗證字符串是一年
回答
在的聰明/正則表達式魔術一點點的費用,像下面這樣可以讓你測試不僅是一個字符串是否是數字(第一準則,作爲一個有效的年份),但它是否屬於一個特定的年份範圍內:
def is_valid_year?(date_str, start=1900, end=2099)
date_str.grep(/^(\d)+$/) {|date_str| (start..end).include?(date_str.to_i) }.first
end
上述功能與非數字字符,false
對於那些數字,但所提供的範圍之外的任何字符串返回nil
,有效年份字符串爲true
。
Date.parse(string_of_date).gregorian?
另外,看看Date class的文檔。
聽起來更直接的問題是:你如何驗證用戶輸入的字符串對應於1582和2500之間的數字(比如說)。你可以這樣做是這樣的:
date_string.scan(/\D/).empty? and (1582..2500).include?(date_string.to_i)
這種方式,你可以選擇一個明智的一年是什麼,太 - 例如,800真的在你的應用有效的答案嗎?或3000?
下面是做這件事:
Date.strptime(date_str, "%Y").gregorian?
注意,這會拋出異常,如果字符串是在一個意想不到的格式。另一個(更寬容)選項,就是:
Date.new(date_str.to_i).gregorian?
想要解析字符串中的整數是Ruby的一個常見問題。可能因爲沒有完美的方法。也許它值得自己的標籤!
Test if a string is basically an integer in quotes using Ruby?
How do I get the second integer in a Ruby string with to_i?
Extract and multiple integers from user-input string in Ruby?
How can I convert an entire line of input into an integer in Ruby?
How do I parse a number from a String that may have a leading zero?
Retrieve number from the string pattern using regular expression
由@rcoder接受的答案將不會正常工作,因爲我在rails 4 + 上測試,我做了另一個簡單的。
def is_valid_year? year
return false if year.to_i.to_s != year
year.strip.to_i.between?(1800, 2999)
end
第一行不接受的字符,你也可以改變你的願望
- 1. IOS:驗證一個字符串是否爲空字符串
- 2. 如何驗證字符串是否包含某些字符?
- 3. Javascript驗證字符串是一個字符後跟數字
- 4. 驗證字符串
- 5. 驗證字符串
- 6. 如何驗證字符串是否爲字母數字
- 7. 驗證一個字符串,而不是字符集
- 8. 如何驗證字符串是否包含列表中的任何字符串?
- 9. 如何在NSUserdefaults中驗證字符串
- 10. 如何驗證在vb.net字符串
- 11. 如何用Joi驗證字符串?
- 12. 如何驗證JSON字符串JQuery的
- 13. 如何在Java中驗證字符串?
- 14. 如何驗證JSoup選擇字符串
- 15. 如何驗證字符串長度?
- 16. 如何驗證字符串的格式?
- 17. 如何驗證JavaScript中的字符串?
- 18. 字符串字母驗證
- 19. 如何驗證字符串只用於非字母字符jquery驗證
- 20. 如何驗證字段是否爲GORM的空字符串?
- 21. 如何驗證字符串是否是dateTime對象?
- 22. 如何驗證字符串是否是有效的浮點數?
- 23. 如何驗證字符串是否是正則表達式?
- 24. 如何驗證字符串是否是Clojure中的有效URL
- 25. PHP驗證和驗證字符串
- 26. Python-如何驗證字符串是否以特定字符串結尾?
- 27. 如何驗證字符串數組是否包含某個字符串?
- 28. 驗證是否字符串數組
- 29. 驗證xml是否對xsd字符串
- 30. 如何使用jquery驗證php md5字符串驗證
+ 1-Wow很好的工作......我想我也應該深入探究Regex! – RubyDubee
一些(迂腐?)注意:您不能命名方法參數結束(因爲這是一個保留關鍵字),並且此方法將爲字符串「1999」返回false,因此您可能需要在.grep之前調用.strip。 –
@Greg:參數名稱的好處 - 我明顯從IRB會話中提取了這個,而不是完整的源文件,因此在瀏覽器窗口中更改了名稱。調用'#strip'可能是驗證規則的有用放鬆,但它將取決於應用程序。 – rcoder