2012-01-20 4 views

ответ

21
 

function parseDate(str) { 
    var m = str.match(/^(\d{1,2})-(\d{1,2})-(\d{4})$/); 
    return (m) ? new Date(m[3], m[2]-1, m[1]) : null; 
} 

 
+0

Спасибо всем, он отлично сработал ... – Gopesh

4

Попробуйте это:

'01-01-2012'.match(/\d{2}-\d{2}-\d{4}/) 

Обратите внимание, что, что таким образом дата 33-12-2022 будет считаться действительным, как хорошо!

3
'01-01-2012'.match(/(?!3[2-9]|00|02-3[01]|04-31|06-31|09-31|11-31)[0-3][0-9]-(?!1[3-9]|00)[01][0-9]-(?!10|28|29)[12][089][0-9][0-9]/) 

Это выглядит только действительные даты от 1800 до 2099. Нет високосный поддержки (как в нем принимает каждый год возможный високосный год).

+0

Обновите форматированную часть кода. –

3

Ну, я сделал это:

'31-12-1987'.match(/(3[01]|[2][0-9]|0\d)-(1[0-2]|0\[1-9])-\d{4}/) 

Подтверждает день от 01 до 31, месяц от 01 до 12 лет и год из четырех цифр. Он проваливается только 30 февраля и месяцы без 31 дня. Который вы можете очистить, используя new Date('mm/dd/yyyy').

+0

для hijri дата, нет '31'ˢᵗ ..поэтому мы удаляем '1' из'/3 [01] .... ', чтобы иметь:'/(3 [0] | [2] [0-9] | 0 \ d) - (1 [0- 2] | 0 \ [1-9]) - \ d {4}/' –

-2

/^ (\ д {1,2}) (\ /) (\ d {1,2}) \ 2 (\ d {4}) \ $/

11

дд-ММ yyyy

Проверяет ли високосный год. Годы с 1900 по 9999 год действительны. Только дд-мм-гггг

var stringToValidate = "29-02-2012"; 
var rgexp = /(^(((0[1-9]|1[0-9]|2[0-8])[-](0[1-9]|1[012]))|((29|30|31)[-](0[13578]|1[02]))|((29|30)[-](0[4,6,9]|11)))[-](19|[2-9][0-9])\d\d$)|(^29[-]02[-](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)/; 
var isValidDate = rgexp.test(stringToValidate); 
+0

Не могли бы вы объяснить свое регулярное выражение ..? –

+0

@GangadharJannu Извините за задержку в ответе, я не заметил вас, вопрос – gdZeus

+0

'(0 [1-9] | [12] [0-8]) [-] (0 [1-9] | 1 [012]) '- дни: от 1 до 28 за любые месяцы – gdZeus

2

Это регулярное выражение для MM/DD/YYYY и M/D/YYYY

var date_regex = /^(0?[1-9]|1[012])[\/](0?[1-9]|[12][0-9]|3[01])[\/]\d{4}$/; 
+0

очень спасибо Rawat. –

0

Работа несколько выше вместе (в основном @ gdZeus в) теперь вы можете do MM/dd/yyyy | MM-dd-yyyy | MM.DD.YYYY

/(^(((0[1-9]|1[012])[-/.](0[1-9]|1[0-9]|2[0-8]))|((0[13578]|1[02])[-/.](29|30|31))|((0[4,6,9]|11)[-/.](29|30)))[-/.](19|[2-9][0-9])\d\d$)|(^02[-/.]29[-/.](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)/ 

Кроме того, если вы используете этот встроенный в файл JS вы можете использовать следующее, который возвращает регулярное выражение буквально. Это позволит вам подтвердить, что дата в прошлом! Это удобно для дней рождения. Вы можете отменить его, чтобы проверить, что дата в будущем также (например, проверка кредитной карты exp). Это будет работать практически в любом месте javascript, но если вам действительно нужен литерал регулярного выражения. Например, если вы сериализуете его в другом формате без возможности запуска js.

new RegExp('(^(((0[1-9]|1[012])[-/.](0[1-9]|1[0-9]|2[0-8]))|((0[13578]|1[02])[-/.](29|30|31))|((0[4,6,9]|11)[-/.](29|30)))[-/.]('+range(1920, new Date().getFullYear()).join('|')+')$)|(^02[-/.]29[-/.]('+range(1920, new Date().getFullYear()).filter(function(year){if (year % 4 == 0) { return true }}).join('|')+')$)/', 'g') 

возвращается:

/(^(((0[1-9]|1[012])[-\/.](0[1-9]|1[0-9]|2[0-8]))|((0[13578]|1[02])[-\/.](29|30|31))|((0[4,6,9]|11)[-\/.](29|30)))[-\/.](1920|1921|1922|1923|1924|1925|1926|1927|1928|1929|1930|1931|1932|1933|1934|1935|1936|1937|1938|1939|1940|1941|1942|1943|1944|1945|1946|1947|1948|1949|1950|1951|1952|1953|1954|1955|1956|1957|1958|1959|1960|1961|1962|1963|1964|1965|1966|1967|1968|1969|1970|1971|1972|1973|1974|1975|1976|1977|1978|1979|1980|1981|1982|1983|1984|1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997|1998|1999|2000|2001|2002|2003|2004|2005|2006|2007|2008|2009|2010|2011|2012|2013|2014|2015)$)|(^02[-\/.]29[-\/.](1920|1924|1928|1932|1936|1940|1944|1948|1952|1956|1960|1964|1968|1972|1976|1980|1984|1988|1992|1996|2000|2004|2008|2012)$)\//g 

Примечание: это использует функцию диапазона Underscore для генерации даты. Вы можете написать свой собственный, хотя, как этот очень безвкусный вариант :)

function range(start, end) { 
    var foo = []; 
    for (var i = start; i <= end; i++) { 
    foo.push(i); 
    } 
    return foo; 
} 
0
$('#DOB').blur(function() { 
var s = $('#DOB').val(); alert('Entered date is:' + s); 
var parms = s.split(/[\.\-\/]/); 
var yyyy = parseInt(parms[2], 10); 

var d = new Date(); 
var n = d.getFullYear(); //alert('current year is :' + n); 
if (yyyy > n || yyyy < 1900) { 
    alert('Improper date format, Please enter dd/mm/yyyy format. (invalid year)'); 
} 
var mm = parseInt(parms[1], 10); 
if (mm > 12 || mm < 0) 
{ 
    alert('Improper date format, Please enter dd/mm/yyyy format. (invalid month'); 
} 
var dd = parseInt(parms[0], 10); 
if (dd > 31 || dd < 0) 
{ 
    alert('Improper date format, Please enter dd/mm/yyyy format. (invalid day'); 
} 

//var date = new Date(dd, mm - 1, yyyy, 12, 0, 0, 0); 
//var ndate = (date.getMonth() + 1) && ddmm === date.getDate() && yyyy === date.getFullYear(); 
// alert('new date is:' + ndate); 
}); 
3

Вот Regex для нескольких форматов даты, работающих для меня:

 //dd.MM.yyyy 
     var date_regex = /^(0[1-9]|1\d|2\d|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$/; 
     alert(date_regex.test("02.02.1991")); 

//  //dd/mm/yyyy 
//  var date_regex = /^(0[1-9]|1\d|2\d|3[01])\/(0[1-9]|1[0-2])\/(19|20)\d{2}$/; 
//   alert(date_regex.test("02/12/1991")); 

//  //dd-mm-yyyy 
//  var date_regex = /^(0[1-9]|1\d|2\d|3[01])\-(0[1-9]|1[0-2])\-(19|20)\d{2}$/; 
//  alert(date_regex.test("02-12-1991")); 

//  //mm/dd/yyyy 
//  var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/; 
//  alert(date_regex.test("12/02/1991")); 


//  //yyyy.MM.dd 
//  var date_regex = /^((19|20)\d{2})\.(0[1-9]|1[0-2])\.(0[1-9]|1\d|2\d|3[01])$/; 
//  alert(date_regex.test("1991.12.02")); 

//  //yyyy/MM/dd 
//  var date_regex = /^((19|20)\d{2})\/(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])$/; 
//  alert(date_regex.test("1991/12/02")); 

//  //yyyy-MM-dd 
//  var date_regex = /^((19|20)\d{2})\-(0[1-9]|1[0-2])\-(0[1-9]|1\d|2\d|3[01])$/; 
//  alert(date_regex.test("1991-12-02")); 
Смежные вопросы