2016-10-06 4 views
1

У меня есть функция, которая анализирует временные строки, отформатированные как hh: mm (например, 18:45). Часы и минуты можно разделить на двоеточие, пробел() или запятую (18,45).строка синтаксического анализа jQuery

следующие переменные разделить строку времени, если используется двоеточие:

var hourstart = parseInt(ini.substr(0, ini.indexOf(':'))); 
var minutestart = parseInt(ini.substr(ini.indexOf(":") + 1)); 

Как я могу заставить их работать и тогда, когда пробел или запятая? Я попытался с:

ini.indexOf(':'||' '||',') 

, но он не работает.

ответ

2

Если вы хотите также проверить, если строка соответствует формату digits + , . + digits, вы можете использовать /^(\d+)[ :,](\d+)$/ регулярное выражение (или даже /^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/):

var s = "18:45"; 
 
var m = s.match(/^(\d+)[ :,](\d+)$/); 
 
if (m) { 
 
    console.log("Hour: " + parseInt(m[1])); 
 
    console.log("Minute: " + parseInt(m[2])); 
 
}

Детали:

  • ^ - начало строки
  • (\d+) - Группа 1 (часы), захватив 1 или более цифр
  • [ :,] - класс символов соответствия 1 одиночный символ: либо :, либо ,
  • (\d+) - Группа 2 (минуты), улавливающая 1 или более цифр
  • $ - конец строки.

И

  • (0?[0-9]|1[0-9]|2[0-3]) - захватывает часов от 00 к 23 с дополнительным ведущим 0 и
  • ([0-5][0-9]) - захватывает минут (от 00 до 59)
+0

Возможно, вам понадобится \ d {1,2}/\ d {2}, а не \ d +. Не ясно из вопроса, если 1am - 1:00 или 01:00 –

+0

Ну, по этому пути это может быть даже '/^(0? [0-9] | 1 [0-9] | 2 [0-3 ]): ([0-5] [0-9]) $/'. Это зависит от уровня входной строки «предварительная валидация». –

2

Вы можете использовать регулярное выражение для разделения с

var time = "18 45"; 
 

 
var parts = time.split(/[,\s\.\:]+/).map(Number); 
 

 
var hours = parts.shift(); 
 
var mins = parts.shift(); 
 

 
console.log(hours); 
 
console.log(mins);

+0

Я добавил полукокса толстой кишки , Оно работает. 'var parts = ini.split (/ [:, \ s \.] + /). map (Number);' 'var hourstart = parseInt (parts.shift());' 'var minutestart = parseInt (части .shift()); ' – Alex

+0

Забыл двоеточие, добавил его сейчас. Вам не нужно разбирать значения, они уже целые, это то, что делает '.map (Number)' часть, она анализирует все значения в виде чисел. – adeneo

+0

Без 'parseInt' он возвращал значение« NaN: NaN »после некоторых вычислений по часам/минутам. – Alex

Смежные вопросы