什麼是正則表達式只允許破折號和數字?只允許破折號和數字的正則表達式?
一個很好的例子是在電話號碼中使用。例如555-555-555,12-2314-425。
我不希望這樣的條目,如:-------------
雖然但-34--53-343
現在罰款。
什麼是正則表達式只允許破折號和數字?只允許破折號和數字的正則表達式?
一個很好的例子是在電話號碼中使用。例如555-555-555,12-2314-425。
我不希望這樣的條目,如:-------------
雖然但-34--53-343
現在罰款。
所以作爲規定的問題,你至少需要一個數字,但另有0-9或破折號任何。
/^[\d-]*\d[\d-]*$/
%w{555-555-555 12-2314-425 -34--53-343 -------------}.each{|s| puts "#{s} #{s.match(/^[\d-]*\d[\d-]*$/) ? 'does' : 'does not'} match"}
555-555-555 does match
12-2314-425 does match
-34--53-343 does match
------------- does not match
如果你想認識的電話號碼,你可能想要的東西,承認任選被單短線分開的數字序列,試試這個來代替:
/^\d+(?:-\d+)*$/
不包括開頭或結尾的破折號和雙破折號。
+1:刪除了我的答案,意識到它和這個相同,除了你用'\ d'。這是[鏈接](http://rubular.com/r/IX1r3vaH9N),以查看您的工作。 – Windle
那麼,如果他們決定不使用破折號也不錯。我想一個更準確的說法是,他們只能有數字或破折號。 – LearningRoR
正則表達式沒有內存,如果所有點都可以被任何一個點佔用,則不能保證數字在短劃線之間。 – TheZ
@TheZ Ruby和其他動態語言正則表達式肯定是「有回憶」(http://www.ruby-doc.org/core-1.9.3/Regexp.html#label-Capturing)。一個不需要「記憶」來使正則表達式匹配這個問題的期望行爲,請參閱下面的答案。 – dbenhur