दिलचस्प पोस्ट
एक्लिप्स सीडीटी इंडेक्सर को सी ++ 11 कंटेनर नहीं पता है एक एकल फ़ाइल की हार्ड रीसेट नेटवर्क के बाहर बाहरी साइट से आंतरिक एमवीसी वेब एपीआई को कैसे अनुमति दें मैं जावास्क्रिप्ट फ़ाइलों को रीफ्रेश करने के लिए ग्राहकों को कैसे मजबूर कर सकता हूं? डेटा फ्रेम के सेल से मान कैसे प्राप्त करें? मैं XCode में उद्देश्य-सी के साथ C ++ का उपयोग कैसे कर सकता हूं? यूट्यूब एपीआई v3, कैसे वीडियो अवधियां पाने के लिए? अनाम स्ट्रैक्ट्स / यूनियनों के साथ सी कोड कैसे संकलित करें? एक विशेष मान के लिए सभी सबसेट्स का पता लगाएं गतिशील (सी # 4) और var के बीच अंतर क्या है? एक पूर्ण कार्य बनाएं <T> कन्वर्ट करने के लिए सीएसटीइंग कंसल्टेंट्स * निष्पादित किया जा रहा वर्ग के फाईलसिस्टम पथ प्राप्त करना क्यों मेरे जीआईटी रेपो एक अलग सिर राज्य में प्रवेश किया? Sails.js नेस्टेड एसोसिएशनों को आबाद करें

क्रोम में विवादास्पद सत्यापन डीडी / एमएम / याय के साथ मान्य नहीं होगा

मैं विभिन्न ब्राउज़रों में एक तिथि पिकर का उपयोग करते हुए सरल संभव परिदृश्य का उपयोग करने का प्रयास कर रहा हूं। मुझे संदेह है कि मैं बहुत ही सरल तरीके से कुछ कर रहा हूं, लेकिन बहुत सारे खोजों के बाद मुझे अभी भी कोई हल नहीं मिला है। नीचे कुछ नमूना कोड है जो कि मैं क्या प्रयास कर रहा हूँ का प्रतिनिधित्व करता है।

अगर मैं क्रोम (v12.0.742.122) का उपयोग करता हूं और 13/08/2011 जैसी पीकर से कोई दिनांक चुनता हूं तो jQuery के सत्यापन तर्क से पृष्ठ को प्रस्तुत करने की अनुमति नहीं होगी, भले ही मैंने स्पष्ट रूप से प्रारूप को 'डीडी / मिमी / Y y'।

अगर मैं प्रारूप को 'डीडी / एम / yy' में बदलता हूं और 13 / अगस्त / 2011 की तारीख चुनता हूं तो वह क्रोम में काम करता है, लेकिन फिर मेरे लिए आईई (v8.0.7600.16385) में जमा नहीं करेगा। फ़ायरफ़ॉक्स (v3.6.18) में दोनों स्वरूप काम करते हैं

क्रोम में 'dd / mm / yy' के दिनांक स्वरूपों का समर्थन करने के लिए मुझे किस सत्यापन स्क्रिप्ट की आवश्यकता है?

<html> <head> <link rel="stylesheet" type="text/css" href="jquery-ui.css" /> <script type="text/javascript" src="jquery-1.4.4.js"></script> <script type="text/javascript" src="jquery.validate.js"></script> <script type="text/javascript" src="jquery.validate.unobtrusive.js"></script> <script type="text/javascript" src="jquery-ui.js"></script> <script type="text/javascript"> $(document).ready(function () { $('.date').datepicker({ dateFormat: 'dd/mm/yy' }); $.validator.addMethod("dateRule", function(value, element) { return true; }, "Error message"); }); </script> </head> <body> <form> Date: <input type="text" name="myDate" class="date dateRule" /> <input type="submit" /> </form> </body> </html> 

वेब के समाधान से एकत्रित समाधान "क्रोम में विवादास्पद सत्यापन डीडी / एमएम / याय के साथ मान्य नहीं होगा"

चार घंटे बाद मैंने अंत में जवाब में ठोकर खाई। कुछ कारणों से, क्रोम के पास यूएस दिनांक प्रारूपों का उपयोग करने के लिए कुछ अंतर्निहित प्राथमिकताएं हैं, जहां आईई और फ़ायरफ़ॉक्स समझदार हो सकते हैं और ओएस पर क्षेत्रीय सेटिंग्स का उपयोग कर सकते हैं।

 jQuery.validator.methods["date"] = function (value, element) { return true; } 

आप यहां उपलब्ध Globalize.js प्लगइन का उपयोग कर सकते हैं: https://github.com/jquery/globalize

तो बस अपनी वेब साइट की मुख्य स्क्रिप्ट फ़ाइल में मान्य विधि को फिर से परिभाषित करें (जैसे jquery.validate.js लाइब्रेरी फ़ाइल को संपादित करने से बचें, क्योंकि आप इसे भविष्य में अपडेट करना चाहते हैं):

 $.validator.methods.date = function (value, element) { return this.optional(element) || Globalize.parseDate(value, "d/M/y", "en"); } 

मुझे पता है कि मैं पार्टी के लिए थोड़ा देर कर रहा हूं, लेकिन यहां इसका समाधान है जो मैंने क्रोम सत्यापन के लिए इस्तेमाल किया था जो यूके फॉर्मेट की तारीखों को स्वीकार नहीं करता था। एक सरल प्लग और प्ले सत्यापन, यह किसी भी प्लग इन पर निर्भर नहीं करता है या किसी भी फाइल को संशोधित करता है। यह 1/1/1900 और 31/31/299 9 के बीच किसी भी तारीख को स्वीकार करेगा, इसलिए यूएस या यूके प्रारूप। जाहिर है वहाँ अमान्य तिथियां हैं जो पिछले चुपकेगी, लेकिन आप regex को अपने दिल की सामग्री पर ज़ूम कर सकते हैं। यह मेरी जरूरतों को पूरा करता है क्योंकि यह साइट के कम ट्रैफ़िक क्षेत्र पर उपयोग की जाएगी, सर्वर-साइड सत्यापन के साथ। प्रश्न में साइट का क्षेत्र ASP.net MVC के साथ बनाया गया है

 jQuery.validator.methods.date = function(value, element) { var dateRegex = /^(0?[1-9]\/|[12]\d\/|3[01]\/){2}(19|20)\d\d$/; return this.optional(element) || dateRegex.test(value); }; 

ऐसा लगता है कि इस समस्या को JQuery टीम के साथ उठाया गया है।

https://github.com/jzaefferer/jquery-validation/issues/153

अब के लिए वैकल्पिक हल की तरह लगता है कि dateITA को अतिरिक्त- methods.js में उपयोग करना है

यह इस तरह दिख रहा है:

 jQuery.validator.addMethod( "dateITA", function(value, element) { var check = false; var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/; if( re.test(value)){ var adata = value.split('/'); var gg = parseInt(adata[0],10); var mm = parseInt(adata[1],10); var aaaa = parseInt(adata[2],10); var xdata = new Date(aaaa,mm-1,gg); if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) ) check = true; else check = false; } else check = false; return this.optional(element) || check; }, "Please enter a correct date" ); 

यदि आप उस वैधीकरण को जोड़ते हैं तो आप अपने datepicker को '.dateITA' कक्षा में संलग्न कर सकते हैं।

इस प्रकार अब तक यह मेरे लिए क्रोम में इस बेवकूफी मुद्दे से परे मुझे पाने के लिए अच्छी तरह से काम किया है।

यह निनाव एमवीसी 4 में एक समस्या बनी हुई है, जहां EditorFor DateTime अभी भी एक data-val-date विशेषता का उत्पादन करती है, यद्यपि इसका उपयोग नहीं करने के लिए jQuery के सत्यापन प्लगइन में स्पष्ट प्रलेखन के बावजूद !!! उम्मीद है कि माइक्रोसॉफ्ट इस को ठीक करता है और data-val-date को फिर कभी नहीं सुना जाता है!

इस बीच आप सुझाए गए पुस्तकालय का इस्तेमाल आधुनिकता के माध्यम से कर सकते हैं:

 yepnope({ test: isNaN(Date.parse("23/2/2012")), nope: 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/additional-methods.min.js', complete: function () { $.validator.methods.date = $.validator.methods.dateITA } }); 

या यदि यूपीएनप / आइडियारिजियर का इस्तेमाल नहीं करना चाहते हैं, और डेटआईटीए पद्धति के यूटीसी घटक से छुटकारा पाने के लिए (यदि स्थानीय समय में प्रवेश करने के लिए इस पुस्तकालय का उपयोग कर रहे हैं, तो दिनांक हमेशा महीने के पहले या अंतिम दिन पर मान्य नहीं होगा जब तक कि ग्रीनविच लाइन – अर्थात यूटीसी +0):

 (function ($) { var invokeTestDate = function () { return $.validator.methods.date.call({ optional: function () { return false; }, (new Date(2012,8,23)).toLocaleDateString(), null); }; if (invokeTestDate()) { return; } // http://docs.jquery.com/Plugins/Validation/Methods/date $.validator.methods.date = function (value, element) { //ES - Chrome does not use the locale when new Date objects instantiated: //return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); var d = new Date(); return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value))); } })(jQuery); 

हम अपनी परियोजनाओं पर काम करने के लिए निम्नलिखित का उपयोग करते हैं;

 if ($.validator) { $.validator.addMethod("date", function (value, element, params) { if (this.optional(element)) { return true; } var ok = true; try { $.datepicker.parseDate("dd/mm/yy", value); } catch (err) { ok = false; } return ok; }); } 

मई यह कोड आपकी सहायता करता है

 $.validator.addMethod( "date", function(value, element) { var check = false; var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/; var reBR = /^\d{4}\-\d{1,2}\-\d{1,2}$/; if( re.test(value)){ var adata = value.split('/'); var gg = parseInt(adata[0],10); var mm = parseInt(adata[1],10); var aaaa = parseInt(adata[2],10); var xdata = new Date(aaaa,mm-1,gg); if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) ) check = true; else check = false; } else if( reBR.test(value)){ var adata = value.split('-'); var aaaa = parseInt(adata[0],10); var mm = parseInt(adata[1],10); var gg = parseInt(adata[2],10); var xdata = new Date(aaaa,mm-1,gg); if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) ) check = true; else check = false; } else check = false; console.log(check); return this.optional(element) || check; }, "Por favor insira uma data válida" ); 

जिस तारीख को आप निर्धारित करने के लिए परिभाषित करते हैं, उस तारीख नियम विधि को बदलना चाहिए (उदाहरण के लिए regex सिर्फ एक सरल है):

 $.validator.addMethod( "dateRule", function(value, element) { return value.match(/^\d\d?\/\d\d?\/\d\d$/); }, "Please enter a date in the format dd/mm/yy" ); 

आप regex स्विच जो भी आप चाहते हैं के लिए कर सकते हैं। मुझे इस तिथि के लिए रेजेक्स मिला है जो एम / डी / वाई वाई या एम / डी / वाई वाई वाई वाई या एमएम / डीडी / वाई वाई वाई वाई या एमएम / डीडी / वाई वाई का समर्थन करता है: 1/1/1920 के माध्यम से 12/31/2019; 29 फरवरी और 30 को हमेशा अनुमति दी जाती है

 ^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$ 

मुझे किसी भी संस्कृति के लिए काम करने वाला एक ऐसा हल मिल गया

http://devdens.blogspot.com/2011/11/jquery-validation-fix-for-date-format_29.html

यह आपको वास्तविक jquery.valdiation.min.js फ़ाइल को संशोधित करने की आवश्यकता है, लेकिन अभी तक यह मेरे लिए काम कर रहा है

यह मेरे लिए काम करने वाला एकमात्र समाधान है: http://www.codeproject.com/Tips/579279/Fixing-jQuery-non-US-Date-Validation-for-Chrome

  jQuery.extend(jQuery.validator.methods, { date: function (value, element) { var isChrome = window.chrome; // make correction for chrome if (isChrome) { var d = new Date(); return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value))); } // leave default behavior else { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); } } }); 

आपकी सत्यापन फ़ाइल को कॉल करने के बाद मुझे निम्न त्रुटि कोड का स्निपेट करने के लिए इस त्रुटि का सबसे सरल सुधार मिला है;

  jQuery.validator.methods["date"] = function (value, element){ var shortDateFormat = "dd/mm/yy"; var res = true; try { $.datepicker.parseDate(shortDateFormat, value); } catch (error) { res = false; } return res; } 

यहां तक ​​कि 2016 में मिले संस्करणों में भी यह समस्या क्रोम में ऊपर दिए गए कोड के बिना और फ़ायरफ़ॉक्स में नहीं है।

यह मेरा पसंदीदा समाधान है क्योंकि इसके लिए कोई अतिरिक्त लाइब्रेरी या प्लगिन काम करने की आवश्यकता नहीं है।

इस मुद्दे को googling के दौरान मुझे इस कोड स्निपेट मिला