#javascript #regex
#javascript #регулярное выражение
Вопрос:
Форматировать дату: MMM D[,] YYYY
[,]
— необязательная запятая и может содержать некоторый пробел. Пример:
Nov 12, 2000 - true
Nov 12 2000 - true
Nov 12, 2000 - true
Nov 12, 2000 true
Мое регулярное выражение: /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) *(d{1,2}),? *(d{4})$/
Но если значение — март 2010, все, если true
Моя функция для проверки значения
function checkDateWithStringMonth1(value) {
//reset
resetDate();
//set min and max date
var minYear = 1900;
//var maxYear = (new Date()).getFullYear();
// regular expression to match required date format
re = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) *(d{1,2}),? *(d{4})$/;
//check correct
if (value != '') {
if (regs = value.match(re)) {
if (regs[2] < 1 || regs[2] > 31) {
return false;
}
if(regs[3] < minYear){return false;}
} else { return false; }
} else { return false; }
//assign
return true;
}
Комментарии:
1. Я не эксперт в JS, но разве нет функции, которая может преобразовывать строки даты в объекты даты?
2. Я не уверен, в чем вопрос. Вы хотите сказать, что если дать этому строку ‘March 2010’, возвращается
true
?3.
Mar 12,2010
Допустимо? (без пробела после запятой)
Ответ №1:
/^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)s (d{1,2}),?s (d{4})$/
Отличия от вашего оригинала:
s
вместо [пробел] для обработки различных видов пробелов*
:*
означает 0 или более, вы хотите 1 или более- Не нужно экранировать
,
.
Редактировать: Для размещения дат без пробела после запятой:
/^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)s (d{1,2})(?:,|s)s*(d{4})$/
(?:
статистика группы без захвата.(?:,|s)s*
: Разрешите использовать запятую или символ пробела, а затем, возможно, больше пробелов.
Тест:
var dates = ["Nov 12, 2000", "Nov 12 2000", "Nov 12, 2000", "Nov 12, 2000", "Nov 12,2000"],
regex = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)s (d{1,2})(?:,|s)s*(d{4})$/;
dates.map(function (d) { return regex.test(d); });
// => [true, true, true, true, true]
Комментарии:
1. но 12 марта 2010 года допустимо. нужны изменения.
2. обязательно должен быть один разделитель
3. Второе регулярное выражение допустимо для всех ваших примеров.
Ответ №2:
Если я правильно помню, вам не нужно экранировать запятые. Это может помочь. и вместо использования пробелов вы можете захотеть использовать символ пробела s
, который будет обнаруживать пробелы, новые строки и табуляции (хотя новые строки могут к вам не относиться).
Комментарии:
1. какой символ говорит, что один или несколько? * — ноль или больше; ? — ноль или единица; какой символ говорит об одном или нескольких?
2.
символ будет соответствовать одному или нескольким предыдущим символам