Вы можете добавить атрибут min
или max
в input type=date
. Дата должна быть в формате ISO (yyyy-mm-dd). Это поддерживается во многих мобильных браузерах и текущих версиях Chrome, хотя пользователи могут вручную вводить недопустимую дату без использования datepicker.
Атрибуты min
и max
должны быть полной датой; нет способа указать «сегодня» или «+0
». Для этого вам необходимо использовать JavaScript или серверный язык:
var today = new Date().toISOString().split('T')[0];
document.getElementsByName("somedate")[0].setAttribute('min', today);
http://jsfiddle.net/mblase75/kz7d2/
Реализация только сегодня, при разрешении прошлых или будущих дат, здесь не вариант. Однако если вы хотите, чтобы завтра вы были min
датой (гаснет сегодня и все прошлые даты), см. этот вопрос , чтобы увеличить today
на один день.
Как и во всех других случаях, связанных с формами HTML, вы всегда должны проверять полевую серверную сторону независимо от того, как вы ограничиваете ее на стороне клиента.
s = "one thing, two things, three things, four things"
s.split(",").map(&:strip)
# => ["one thing", "two things", "three things", "four things"]
В моей ОС Ubuntu 13.04 , используя Ruby 2.0.0p0
require 'benchmark'
s = "one thing, two things, three things, four things"
result = ""
Benchmark.bmbm do |b|
b.report("strip/split: ") { 1_000_000.times {result = s.split(",").map(&:strip)} }
b.report("regex: ") { 1_000_000.times {result = s.split(/\s*,\s*/)} }
end
Rehearsal -------------------------------------------------
strip/split: 6.260000 0.000000 6.260000 ( 6.276583)
regex: 7.310000 0.000000 7.310000 ( 7.320001)
--------------------------------------- total: 13.570000sec
user system total real
strip/split: 6.350000 0.000000 6.350000 ( 6.363127)
regex: 7.290000 0.000000 7.290000 ( 7.302163)
Если я не ошибаюсь,
things.split(", ")
будет самым простым решением. Однако это работает только тогда, когда есть ровно один пробел. (Обратите внимание на пробел после запятой)
Не бить мертвую лошадь, но вы можете ускорить это, сделав два изменения, которые теперь стали для меня второй натурой. Первый - использовать map!
вместо map
, чтобы избежать создания копии разделенного массива, а второй - избегать использования символа для синтаксиса proc (например, &:split
, который добавляет дополнительную операцию, которую можно избежать с более подробным синтаксисом).
Ниже приведен контрольный показатель:
require 'benchmark'
s = "one thing, two things, three things, four things"
result = ""
Benchmark.bmbm do |b|
b.report("strip/split (map/to_proc): ") { 1_000_000.times { result = s.split(",").map(&:strip) } }
b.report("strip/split (map): ") { 1_000_000.times { result = s.split(",").map { |e| e.strip } } }
b.report("strip/split (map!/to_proc): ") { 1_000_000.times { result = s.split(",").map!(&:strip) } }
b.report("strip/split (map!): ") { 1_000_000.times { result = s.split(",").map! { |e| e.strip } } }
b.report("regex: ") { 1_000_000.times { result = s.split(/\s*,\s*/) } }
end
Результаты:
user system total real
strip/split (map/to_proc): 5.230000 0.010000 5.240000 ( 5.283079)
strip/split (map): 4.660000 0.010000 4.670000 ( 4.716920)
strip/split (map!/to_proc): 4.440000 0.020000 4.460000 ( 4.492943)
strip/split (map!): 4.320000 0.010000 4.330000 ( 4.365386)
regex: 7.190000 0.060000 7.250000 ( 7.322932)
Не забудьте прочитать числа относительно друг друга, а не относительно показателей, представленных в других ответах.
Это не подразумевается как ответ на первоначальный вопрос, но я хотел поделиться кодом тестов, чтобы позволить людям самим проверить два предложенных решения:
require 'benchmark'
s = "one thing, two things, three things, four things"
result = ""
Benchmark.bmbm do |b|
b.report("strip/split: ") { 1_000_000.times {result = s.split(",").map(&:strip)} }
b.report("regex: ") { 1_000_000.times {result = s.split(/\s*,\s*/)} }
end
В моей системе (Ruby 2.0.0p247 на OS X 10.8), которая выдает следующий результат:
Rehearsal -------------------------------------------------
strip/split: 2.140000 0.000000 2.140000 ( 2.143905)
regex: 3.570000 0.010000 3.580000 ( 3.572911)
---------------------------------------- total: 5.720000sec
user system total real
strip/split: 2.150000 0.000000 2.150000 ( 2.146948)
regex: 3.580000 0.010000 3.590000 ( 3.590646)
Эти результаты, конечно, могут варьироваться в зависимости от версий ruby, аппаратного обеспечения и ОС.
Как любитель скорости, я люблю тесты ... Но давайте посмотрим правде в глаза: если вы не выполняете эту операцию внутри миллиона циклов в вашем коде, различия в скорости, вероятно, не будут влиять на ваш код почти так же, как очевидные кодирующие конструкции.
По моему мнению, если производительность не имеет значения, у @arup есть лучшее, самое простое и ясное решение.
Используйте регулярное выражение для #split
:
"one thing, two things, three things, four things".split /\s*,\s*/
# => ["one thing", "two things", "three things", "four things"]