2012-04-17 18 views
5

मैं मान्य करने के लिए पासवर्ड चाहते मान्य करने के लिए कैसे:संख्या और बड़े अक्षर जावास्क्रिप्ट में

  • शामिल कम से कम 1 संख्या
  • कम से कम 1 बड़े अक्षर (अपरकेस)
  • शामिल कम से कम 1 सामान्य अक्षर होना (लोअरकेस)

मैं इस कोड

function validate() 
{ 
    var a=document.getElementById("pass").value 
    var b=0 
    var c=0 
    var d=0; 
    for(i=0;i<a.length;i++) 
    { 
     if(a[i]==a[i].toUpperCase()) 
      b++; 
     if(a[i]==a[i].toLowerCase()) 
      c++; 
     if(!isNaN(a[i])) 
      d++; 
    } 
    if(a=="") 
    { 
     alert("Password must be filled") 
    } 
    else if(a) 
    { 
     alert("Total capital letter "+b) 
     alert("Total normal letter "+c) 
     alert("Total number"+d) 
    } 
} 
का इस्तेमाल किया

एक चीज जो मुझे भ्रमित करती है वह है कि यदि मैं एक संख्या इनपुट करता हूं, तो यह अपरकेस अक्षर के रूप में भी गिना जाता है ???

उत्तर

1

"1" .toUpperCase == "1"! आप इस बारे में क्या कहते हैं :) आप इस तरह अपने जाँच कर सकता है:

for(i=0;i<a.length;i++) 
    { 
     if('A' <= a[i] && a[i] <= 'Z') // check if you have an uppercase 
      b++; 
     if('a' <= a[i] && a[i] <= 'z') // check if you have a lowercase 
      c++; 
     if('0' <= a[i] && a[i] <= '9') // check if you have a numeric 
      d++; 
    } 

अब अगर बी, सी, या घ 0 के बराबर होती है, वहाँ एक समस्या है।

+0

धन्यवाद दोस्त, यह काम करता है :) समस्या को हल करने के लिए मैं का उपयोग करता हूं (0 <= a [i] && [i] <= 9) बिना ' – greenthunder

+0

मुझे उपयोगी होने में खुशी है! इस तरह के सत्यापन के लिए नियमित अभिव्यक्तियां अधिक उपयुक्त होती हैं, लेकिन मुझे संदेह है कि आप उनसे बहुत परिचित नहीं हैं और आपकी प्रोग्रामिंग सोच में कुछ सुधार की आवश्यकता है (आपके द्वारा पोस्ट किया गया कोड काफी खराब है) और इसलिए मैंने इस समाधान को आपके जैसा ही पोस्ट किया है। – gabitzish

+0

आप सही हैं .. मैं जावास्क्रिप्ट कोज़ में नौसिखिया हूं मैंने पिछले गुरुवार को सीखना शुरू किया>< – greenthunder

0

toUpperCase() और toLowerCase() तब भी चरित्र को वापस कर देगा यदि यह परिवर्तित करने में सक्षम नहीं है, इसलिए आपके परीक्षण संख्याओं के लिए सफल होंगे।

इसके बजाय, आपको पहले जांच करनी चाहिए कि isNaN(a[i]) toLowerCase/ToUpperCase का उपयोग करके परीक्षण करने से पहले सच है।

4

नियमित अभिव्यक्ति इसके लिए अधिक उपयुक्त हैं। पर विचार करें:

var rules = [/[0-9]/, /[A-Z]/, /[a-z]/] 
var passwordOk = rules.every(function(r) { return r.test(password) }); 

डॉक्स::

var containsDigits = /[0-9]/.test(password) 
var containsUpper = /[A-Z]/.test(password) 
var containsLower = /[a-z]/.test(password) 

if (containsDigits && containsUpper && containsLower) 
....ok 

एक अधिक कॉम्पैक्ट लेकिन कम संगत विकल्प regexes की एक सरणी से अधिक एक बूलियन कुल उपयोग करने के लिए है test, every

+0

शामिल करने के लिए कैसे करें Digits/includeUpper/includeLower? क्या वे वाक्यविन्यास हैं? मैंने कोशिश की कि (एक [i] == मेंUpper() शामिल है, यह – greenthunder

+0

काम नहीं करता है, यह आपके कोड में ए, बी, सी की तरह चर हैं। मैंने स्पष्टता के लिए कुछ 'var' जोड़ा। – georg

0

बहुत ही कम तरीका हो सकता है :

var pwd = document.getElementById("pass").value, 
    valid = Number(/\d/.test('1abcD'))+ 
      Number(/[a-z]/.test('1abcD'))+ 
      Number(/[A-Z]/.test('1abcD')) === 3; 
संबंधित मुद्दे