Wie von mu is too short
, Regex ist großartig und alle, aber Sie brauchen mehr in Ihrem Arsenal dann nur das.
def timestamp
print 'Enter time stamp: '
ts = gets.chomp.upcase
verify = DateTime.strptime(ts, '%m/%d/%Y %I:%M:%S %p')
puts ts
rescue ArgumentError
puts 'Invalid timestamp formatting must contain date time AM or PM'
timestamp
end
Natürlich könnte dies einen Überlauf aus dem Puffer verursachen, da es rekursiv ist, aber das Chance dafür ist ziemlich schlank.
Wenn dies auszuführen:
irb(main):01:0> def timestamp
irb(main):02:1> print 'Enter time stamp: '
irb(main):02:1> ts = gets.chomp.upcase
irb(main):04:1> verify = DateTime.strptime(ts, '%m/%d/%Y %I:%M:%S %p')
irb(main):05:1> puts ts
irb(main):06:1> rescue ArgumentError
<valid timestamp formatting must contain date time AM or PM'
irb(main):07:1> timestamp
irb(main):08:1> end
=> :timestamp
irb(main):09:0> timestamp
Enter time stamp: test
Invalid timestamp formatting must contain date time AM or PM
Enter time stamp: 06/30/2016 6:6:54 pm
06/30/2016 6:6:54 PM
=> nil
Allerdings ist es möglich, dass Sie eine bessere Art und Weise der Überprüfung machen könnte:
def enter_stamp
print 'Enter timestamp: '
ts = gets.chomp
verify_stamp(ts)
end
def verify_stamp(timestamp)
Date.strptime(timestamp, '%m/%d/%Y %I:%M:%S %p')
puts timestamp unless ArgumentError
rescue ArgumentError
puts 'Invalid timestamp format'
enter_stamp
end
Das macht es so, dass die Methoden mehr OOPish sind und Ruby dreht sich alles um OOP, also funktioniert es irgendwie. Wenn dies ausgeführt wird:
irb(main):001:0> require 'date'
=> true
irb(main):002:0>
irb(main):003:0* def enter_stamp
irb(main):004:1> print 'Enter timestamp: '
irb(main):005:1> ts = gets.chomp
irb(main):006:1> verify_stamp(ts)
irb(main):007:1> end
=> :enter_stamp
irb(main):008:0>
irb(main):009:0* def verify_stamp(timestamp)
irb(main):010:1> Date.strptime(timestamp, '%m/%d/%Y %I:%M:%S %p')
irb(main):011:1> puts timestamp unless ArgumentError
irb(main):012:1> rescue ArgumentError
irb(main):013:1> puts 'Invalid timestamp format'
irb(main):014:1> enter_stamp
irb(main):015:1> end
=> :verify_stamp
irb(main):016:0> enter_stamp
Enter timestamp: test
Invalid timestamp format
Enter timestamp: 06/12/2016 8:08:54 pm
=> nil
Und natürlich können Sie auch nur einen regulären Ausdruck verwenden:
def verify_timestamp(stamp)
if !(stamp[/^\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{1,2}:\d{1,2} [AP]M\z/])
puts 'Invalid timestamp formatting'
timestamp
else
stamp
end
end
def timestamp
print 'Enter timestamp for removal: '
ts = gets.chomp
verify_timestamp(ts)
end
Wie gesagt regexs sind wunderbar, sie sind einfach nicht genau das Beste, was alles zu verwenden, die Zeit .. Wenn dies ausgeführt wird:
irb(main):001:0> def verify_timestamp(stamp)
<mp[/^\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{1,2}:\d{1,2} [AP]M\z/])
irb(main):003:2> puts 'Invalid timestamp formatting'
irb(main):004:2> timestamp
irb(main):005:2> else
irb(main):006:2* stamp
irb(main):007:2> end
irb(main):008:1> end
=> :verify_timestamp
irb(main):009:0>
irb(main):010:0* def timestamp
irb(main):011:1> print 'Enter timestamp for removal: '
irb(main):012:1> ts = gets.chomp
irb(main):013:1> verify_timestamp(ts)
irb(main):014:1> end
=> :timestamp
irb(main):015:0> verify_timestamp(timestamp)
Enter timestamp for removal: test
Invalid timestamp formatting
Enter timestamp for removal: 06/12/2016 8:18:54 pm
=> "06/12/2016 8:18:54 pm"
irb(main):016:0>
So dort haben Sie es, gibt es drei verschiedene Möglichkeiten, um Ihre Zeitstempel, um zu überprüfen, je nachdem, was Sie sie verwenden möchten vielleicht eine andere Geschichte sein, aber jeder von ihnen drei Sh Ich könnte den Trick machen.
Ich sehe. Sie möchten entweder 14.09.2014 9:16:32 PM oder 09/14/2014 9:16:32 AM – zee
übereinstimmen Ich möchte einen formatierten Zeitstempel zuordnen, der zwischen 16 und 20 Zeichen (einschließlich Leerzeichen) enthalten kann Beispiele dafür, wie diese Zeitstempel aussehen, sind '10/22/2016 9:15:32 PM' oder' 9/9/2016 9: 9: 5 PM' Sie haben nicht die Nummer 0 vor ihnen, wenn sie unten ist 12 Uhr – JohnDoeYo
Sie müssen Ihre Versuche zeigen, den regulären Ausdruck zu erzeugen, anstatt uns zu bitten, sie für Sie zu schreiben. Reguläre Ausdrücke sind gut dokumentiert, einschließlich in Rubys Regexp-Klasse. Daher sollte das Schreiben eines Musters leicht erforscht und herausgefunden werden. http://meta.stackoverflow.com/q/261592/128421 –