Validere ulike inngangsdata i Flash

Validating Ulike inngangsdata i Flash
Del
Del
en
Del

Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.

I dag, nesten alt på nettet er basert på brukerundersøkelser. En kontakt form, en bruker registreringsskjemaet, en søkeboks og så videre. Som utvikler du kan ikke bare stole på at brukeren kan skrive alt som det skal være. For å være sikker på at du alltid får de riktige data fra brukerne du trenger for å validere input. Les videre for å finne ut hvordan ..


I denne opplæringen vil du lære hvordan ulike data er ment å være strukturert og hvordan å validere disse dataene. Merk at disse metodene ikke kan være den beste der ute, eller de mest komplette løsninger

Følgende temaer vil bli dekket i denne opplæringen.

  • Dato og tid validering
    < li> E-post validering

    Web-adresse validering

    Telefonnummer validering

    ISBN (ISBN) validering

    International Bank Account Number (IBAN ) validering

    Kredittkortnummer validering

    Hvert tema behandles uavhengig, slik at du kan følge de du er interessert i.



    Endelig resultat Forhåndsvisning

    Dette er hvordan vår validator vil se:

    Det er flere felt med det formål demonstrasjon. I en reell situasjon vil du sjelden har alle disse feltene i et enkelt skjema.

    I denne opplæringen vil jeg bare dekke koding del. Du vil finne det grafiske grensesnittet i kildefilene. Å følge med dere trenger Flash CS3 +.

    For bedre å forstå denne opplæringen du må ha litt grunnleggende kunnskap om regulære uttrykk og strengfunksjoner. Sjekk denne ressursen om regulære uttrykk i Actionscript 3.0 hvis du ikke føler deg komfortabel med syntaksen.

    Forstå FLA fil

    Vel, det er ikke en veldig komplisert grensesnitt. Hvis du åpner Validator.fla
    fil i begynne mappen på Source nedlasting, vil du finne to rammer: en låst, heter Actionanmeldelser og en annen som heter Interface
    .

    Interface
    laget er tom. Der vil vi legge våre tekstbokser som brukes til data input

    Action
    laget du vil finne denne koden:
    Var validator. Validator = new Validator (); scenen. addEventListener (FocusEvent.FOCUS_IN, registrer); stage.addEventListener (FocusEvent.FOCUS_OUT Avregistrer), funksjon register (e: FocusEvent): void {e.target.addEventListener (Event.ENTER_FRAME, onFrameUpdate, falsk, 0, true);} funksjon unregister (e: FocusEvent): void {e.target.removeEventListener (Event.ENTER_FRAME, onFrameUpdate);} funksjon onFrameUpdate (e: Hendelses): void {var inngang: String = e.target.text; Var gyldig: Boolean; bryteren (e.target) {} if (gyldig) e.target.parent.validTick.gotoAndStop ('gyldig'); annet e.target.parent.validTick.gotoAndStop ('ugyldig');}

    Den første linjen representerer en forekomst av vår fremtid Validator
    klasse. Vi vil bruke et eget AS fil til å inneholde denne klassen, slik at den kan brukes i andre prosjekter.

    Vi legger til hendelsen lyttere til scenen for fokus hendelser. Vi vil bruke disse hendelsene til å validere våre inngangsdata bare når et tekstfelt har fokus bare for å unngå unødvendige beregninger.

    onFrameUpdate
    funksjonen kalles på hver ramme når et tekstfelt har fokus på validere data i den.

    Vi skal legge vår fremtid kode i bryteren uttalelse. Alt annet forblir uendret over denne opplæringen. I biblioteket finner du en MovieClip heter TextBox
    . Denne har en inngang Textfield med en forekomst navn input_txt Hotell og annen MovieClip heter validTick
    med to rammer merket "gyldig" og "ugyldig".

    Nå la oss komme til kodingen



    Trinn 1:. Forberedelser

    Først opprette en ny Actionscript-fil og gi den navnet Validator.as

    Lim eller skriv inn følgende kode:
    pakken {public class Validator {offentlig funksjon Validator () {trace ('Validator opprettet'); }}}

    Dette vil være rammen av vår Validator klasse. Vi vil legge til metoder til denne klassen for hver validering typen vi utfører. Plasser denne filen i samme mappe som Validator.fla filen



    Trinn 2:. Calendar Dato Struktur

    Kalenderen dato er en av de mest brukte data på nettet. Strukturen varierer fra sone til sone. Vi skal se på to hoved datoer formater: Storbritannia versjon og USA versjon.

    Den britiske dato uttrykkes som DD-MM-ÅÅÅÅ.

    Den amerikanske datoen er uttrykt som MM-DD-ÅÅÅÅ.

    I begge tilfeller DD står for dagen, står MM for måneden og ÅÅÅÅ står for året. Det er også mulig å bruke en annen karakter for separatoren, som en skråstrek

    Hvis du trenger mer dokumentasjon du kan lære mer om kalenderen datoer her



    Trinn 3:.. Calendar Dato Check

    Kode

    Først av alt vi trenger for å sjekke for å se om datoformatet er riktig. Lim eller skriv inn følgende kode i Validator
    klasse rett etter konstruktøren:
    offentlig funksjon checkDate (dato: String): Boolean {var måneden: String = "(0 [1-9] | 1 [012]) "; Var dagen: String = "(0 [1-9] | [12] [0-9] | 3 [01]?)"; Var år: String = "([1-9] [0-9] {3})"; Var separator: String = "([. \\ /-] {1})"; Var usDate: RegExp = new RegExp ("^" + måned + separator + dag + "\\\\ 2" + år + "$"); Var ukDate: RegExp = new RegExp ("^" + dag + separator + måned + "\\\\ 2" + år + "$"); avkastning (usDate.test (dato) || ukDate.test (dato) til stede:? false); }
    Forklaring

    Den første linjen i funksjonen representerer mønsteret brukes til å sjekke måned:
    Var måned: String = "(0 [1-9] | 1 [012]?)";

    Dette mønsteret vil matche et tall fra 1 til 12. For tall under 10 vil det se etter sifre med ledende null eller uten

    Den andre linjen representerer den dagen mønster:
    Var dag. String = "(0 [1-9] | [12] [0-9] | 3 [01]?)";

    Dette vil matche et tall fra 1 til 31. Som tidligere nevnt, for tall under 10 år det . vil sjekke for siffer med eller uten ledende null

    Den neste linjen representerer året mønster:
    Var år: String = "([1-9] [0-9] {3})";

    Dette vil sjekke om tall mellom 1000 og 9999. Selvfølgelig vi kunne brukte et mønster å se etter år fra 0 til mer enn 9999, men på grunn av problemer vi vil se etter tall innenfor disse ni årtusener.

    Den variable separator
    sjekker bare hvis en av disse fire separatorer brukes: bindestrek "-", prikk, foran skråstrek "/" og white space ""
    ".".

    De to variablene usDate Hotell og ukDate
    representerer de vanlige uttrykk som brukes for å sjekke en dato. De er de samme i utgangspunktet den eneste forskjellen er rekkefølgen av måneden og dagen
    Var usDate. RegExp = new RegExp ("^" + måned + separator + dag + "\\\\ 2" + år + "$");

    Dette vil sjekke for å se om en gyldig måned
    er i begynnelsen av strengen. Etter det sjekker om en gyldig separator
    brukes så det sjekker for en gyldig dag
    . Neste den bruker en backreference til den andre gruppen benyttet i uttrykket (utskilleren) for å sjekke om den andre separatoren ble brukt. Og til slutt det sjekker for en gyldig år
    på slutten av strengen.

    ukDate
    uttrykk har samme effekt. Den eneste forskjellen er at det vil sjekke for dag
    i begynnelsen av strengen.

    I den siste linjen tester vi strengen bruke trefoldig operatøren for å se om det er en gyldig dato i noen av de to formatene og returnerer sant eller usant, avhengig av saken. I en reell case scenario vil du ikke se etter begge disse verdiene, da dette kan føre til forvirring om DD er mindre enn 13 (f.eks 01.06.2010)



    Trinn 4:. Calendar Dato Gjennomføring

    Åpne Validator.fla filen gitt i kildefilene. Velg Interface
    lag og plassere en forekomst av TextBox
    filmklipp på scenen. For å gjøre dette ganske enkelt dra den fra biblioteket hvor som helst på scenen. Gi den en forekomst navn dateField
    .

    Mest sannsynlig vil du ikke finne en e-leverandør som gjør at alle disse tegnene i e-postadresse. For å validere slik en e-postadresse krever en lang og svært komplisert regulært uttrykk. Som mange selskaper (for eksempel Yahoo !, MSN, Gmail.) At bare e-postadresser som inneholder alfanumeriske tegn og bindestrek "-" ".", Dot og understrek "_", vil vi lage en brikke som vi vil jobbe med disse slags adresser.

    For en mer detaljert dokumentasjon om nettadresser (URL) se denne siden.



    Trinn 9: Web Address Sjekk

    Kode

    Lim eller skriv inn følgende kode i vår Validator klassen like etter checkEmailAddress
    metode:
    offentlig funksjon checkWebAddress (adresse : String): Boolean {var protokollen: String = "(http: \\ /\\ /| ftp: \\ /\\ /)"; Var domenenavn: String = "([a-Z0-9 .-] {2})"; Var domainExt: String = "([a-z] {2,6})"; Var nettet: RegExp = new RegExp ('^' + protokoll + + domenenavn + "\\." + domainExt + '$', "i" '?'); returnere web.test (adresse);}
    Forklaring

    Den første linjen definerer mønsteret brukes til å sjekke protokollen. Vanligvis kan dette være valgfritt (avhengig av saken):
    Var protokoll: String = "(? Http: \\ /\\ /| ftp: \\ /\\ /)?";

    Den andre variabelen definert representerer domenet navngi mønster. Et gyldig domenenavn og underdomene navn bare inneholder alfanumeriske tegn, punktum "." og bindestrek "-":
    Var domenenavn: String = "([a-Z0-9 .-] {2})";

    Neste er det toppdomene mønsteret brukes til å sjekke om toppdomenet er gyldig. En Top Level Domain (TLD) kan bare inneholde bokstaver fra A til Z, små bokstaver med 2 eller flere tegn (i vårt tilfelle 6):
    Var domainExt: String = "([a] {2,6})";

    For å gjøre innsjekkingen enda mer streng kan du sjekke om TLD er en eksisterende:
    Var domainExt: String = "(com | net | org | info | tv | mobi | museum | gov | biz | tel | navn | edu | asia | reise | pro) ";

    Dette er bare noen få generiske toppdomener. Du kan se hvordan dette blir ganske lenge du legge til flere og flere toppdomener.

    web
    variabel representerer Regular Expression brukes til å teste om nettadressen er gyldig. Dette sjekker om den medfølgende adressen er bygd opp fra protokollen (valgfritt) og domene (domene må bestå av et domenenavn og et toppdomene atskilt med punktum tegn ".":
    Var nettet: RegExp = new RegExp ('^' + protokoll + + domenenavn + "\\." + domainExt + '$', "i" '?');

    Som i tilfellet av e-post adresse webadresser er små bokstaver, slik at vi bruke "i" (små bokstaver) modifier



    Trinn 10:. Web Address Gjennomføring

    Her finner du en komplett liste over landet ringer koder hvis du ønsker å begrense . telefonnummer innspill til bare flere land også kan du sjekke nummerering Plan for å se hvordan telefonnumre brukes i ulike nettverk og land



    Trinn 12:. Telefonnummer Sjekk

    Kode

    Lim eller skriv inn følgende kode i vår Validator klassen like etter checkWebAddress
    metode:
    offentlig funksjon checkPhoneNumber (telefonnummer: String): Boolean {var country: String = "(( \\\\ + | 00) ([1-9] | [1-9] [0-9] | [1-9] [0-9] {2}))? "; Var num: String = "([0-9] {3,10})"; telefonnummer = phoneNumber.match (/[\\ + \\ d] /g) .join (''); Var telefon: RegExp = new RegExp ("^" + country + num + "$"); returnere phone.test (telefonnummer);}
    Forklaring

    Den første linjen definerer mønsteret brukes til å kontrollere landkode. Som sagt dette er et tall mellom 1 og 999 innledes med "+" eller "00" (valgfritt):
    Var protokoll: String = "(http: \\ /\\ /| ftp: \\ /\\ /)?";

    Den andre variabelen representerer det faktiske antallet. Vi vil gjøre det for å se etter en rekke med 3 til 10 sifre:
    Var num: String = "([0-9] {3,10})";

    På den tredje linjen vi strippe våre telefonnummer av noen ekstra mellomrom eller skilletegn holder bare på "+" tegn og sifre:
    Telefonnummer = phoneNumber.match (/[\\ + \\ d] /g) .join ('');

    telefon
    Regular Expression er et uttrykk som brukes for å sjekke om telefonnummeret er laget av en landkode og et lokalt nummer:
    Var telefon: RegExp = new RegExp ("^" + country + num + "$");

    Den siste linjen returnerer resultatet av testing av mønster over den medfølgende telefonnummeret. Enkelt nok, ikke sant



    Trinn 13: Telefonnummer Implementering

    Hvis du trenger mer detaljerte spesifikasjoner om ISBN-numrene du kan finne alt om dem her. Wiki-siden inneholder informasjon om både ISBN-10 og ISBN-13 nummer



    Trinn 15:. ISBN-10 Sjekk

    Kode

    Lim eller skriv følgende kode på Validator
    klasse rett etter checkPhoneNumber
    metode:
    offentlig funksjon validateISBN10 (ISBN10: String): Boolean {ISBN10 = isbn10.replace (/[-] /g, ''); if (isbn10.length = 10!) {return false; } else {var gyldig: Boolean; Var vekter: Array = [10, 9, 8, 7, 6, 5, 4, 3, 2]; Var sifre: Array = isbn10.split (''); Var kontroll: String = digits.pop (); Var resultat: uint = 0; for (var i: UINT = 0, jeg < 9; i ++) {siffer [i] = sifre [i] * vekter [i]; resultat + = sifre [i]; } Resultat = (resultat% 11 == 0) 0: (11 - Resultatet% 11); bryteren (resultat) {case 10: gyldig = (control.toLowerCase () == 'x'); gå i stykker; standard: gyldig = kontroll == String (resultat); gå i stykker; } Returnere gyldig; }}
    Forklaring

    De første linjene i vår metode strippe antall mellomrom og bindestrek. Så kontrollerer den om lengden er riktig. Et ISBN-10 nummer må ha 9 siffer + en kontroll karakter:
    ISBN10 = isbn10.replace (/[-] /g, ''); if (isbn10.length = 10) {return false;}

    I annet
    den variable gyldige
    lagrer gyldigheten av antall og vekter
    er en matrise med vektene av sifre:
    Var gyldig: boolsk; Var vekter: Array = [10, 9, 8, 7, 6, 5, 4, 3, 2];

    I Sifrene
    matrise vi lagrer sifrene i nummeret og pakke det siste tegnet som er kontroll karakter og lagre den i kontroll
    variabel. resultere
    variabel vil lagre resultatet av sjekken sum:
    Var sifre: Array = isbn10.split (''); Var kontroll: String = digits.pop (); Var resultat: uint = 0;

    Nå som vi har hvert siffer i nummeret må vi multiplisere det med sin vekt. Vi kan gjøre dette med en for-løkke som multipliserer vi hvert element (siffer) i sifrene
    array med den tilsvarende vekt og lagre summen av disse multiplikasjoner:
    for (var i: uint = 0, jeg < 9; i ++) {siffer [i] = sifre [i] * vekter [i]; Resultatet + = sifre [i];}

    I neste linje med kode kontrollerer vi resten av summen med hensyn til 11:
    resultat = (resultat 11% == 0) 0: (11 - resultatet? % 11);

    Dette kunne vært gjort med en if setning, men jeg har brukt den trefoldig operatør som er en forkortelse metode. Trefoldig operatøren arbeider like så variabel = tilstand? verdi1: verdi2;
    . Hvis betingelsen er sann verdi1 vil bli gitt til den variable ellers vil motta verdi2.

    Neste vi sjekke resultatet med en bryter uttalelse og gi verdien til gyldig
    variabel. Hvis det er 10 da kontrollen tegnet må være "x" annet resultatet må samsvare med tilsvarende siffer:
    bryteren (resultat) {case 10: gyldig = (control.toLowerCase () == 'x'); gå i stykker; standard: gyldig = kontroll == String (resultat); break;}

    Og til slutt vi tilbake resultatet av testen



    Trinn 16:. ISBN-10 Gjennomføring


    Trinn 18: ISBN-13 Sjekk

    Kode

    Lim eller skriv inn følgende kode i Validator
    klasse rett etter validateISBN10
    metode:
    offentlig funksjon validateISBN13 (ISBN13: String) : Boolske {var sifre: Array = isbn13.match (/\\ d /g); Var kontroll: uint = digits.pop (); Var resultat: UINT; Var vekt: UINT; if (! digits.length = 12) {return false; } else {for (var i: uint = 0; i < 12; i ++) {vekt = (i% 2 == 0) 1: 3; siffer [i] = sifre [i] * vekt; resultat + = sifre [i]; } Resultat = (resultat% 10 == 0) 0: (10 - Resultatet% 10); returnere (resultat == kontroll); }}
    Forklaring

    sifre
    matrise inneholder sifrene i nummeret. Vi gjør dette ved å trekke ut tallene fra våre tall med matche
    metoden i String-klassen. Etter at vi lagrer kontrollsiffer i kontroll
    variabel ved å trekke ut det siste elementet i sifre matrise:
    Var sifre: Array = isbn13.match (/\\ d /g); Var kontroll: uint = digits.pop ();

    vekt
    variabel vil holde nåværende vekt av et siffer og resultere
    variabel vil holde resultatet av sjekksum:
    Var vekt : UINT; Var resultat: uint;

    Vi bruker en in-else setningen for å se om det er riktig antall sifre i tallene matrise, unntatt kontrollsiffer

    I for-loop vi. iterere gjennom sifre matrise og multipliserer alle tallene med sin vekt (1 og 3 alternerende dem hver sifret) og oppbevar den summen i resultere
    variabel. Hvis posisjonen til sifferet i rekken er et partall vekten er en annen vekten er 3. Vi gjør dette ved å sjekke resten for delingen av i BY 2:
    vekt = ( Jeg% 2 == 0) 1: 3; sifrene [i] = sifre [i] * vekt, resultat + = sifre [i];

    Til slutt gjør vi divisjon med 10 av summen. Hvis det er 0 resultatet er 0 annet vi trekke fra resten fra 10:
    resultat = (resultat% 10 == 0) 0: (10 - Resultatet% 10); avkastning (resultat == kontroll);

    Hvis resultatet sifferet er den samme som kontroll sifret antall er gyldig



    Trinn 19:. ISBN-13 Gjennomføring

    Åpne Validator.fla Hotell og modifisere koden på linjene 34 til 36 som så:
    tilfelle ISBNField.input_txt: gyldig = validator.validateISBN10 (input) || validator.validateISBN13 (input); bryte;

    Dette vil sjekke nummeret både som ISBN-10 og ISBN-13

    Test filmen og skriv ISBN-nummer i tekstfeltet merket med "ISBN-nummer".. Det samme gjelder for denne type tall som i tilfellet med ISBN-10 seg. Hvis et tall er gyldig det betyr ikke nødvendigvis at det også finnes



    Trinn 20:. IBAN Struktur

    International Bank Account Number eller IBAN for kort er en internasjonal standard for nummerering bankkontoer. Dette består av følgende:

    To bokstaver (store bokstaver) som representerer landet

    En sjekknummer består av to siffer som strekker seg fra 00 til 99

    Fire bokstaver (store bokstaver) som representerer banken som utstedte antall

    Et kontonummer ulike lengder avhengig av land og bank

    Validerings Algoritme:


    Vi strippe antall plasser.

    De fire første tegnene i antall (country tegn og kontrollsiffer) er flyttet til baksiden av nummeret.

    Vi konverterer alle alfabetisk tegn i tall som så:
    A = 10, B = 11, C = 12, ..., Z = 35.

    Vi beregne resten av delingen av 97.

    Tallet gjelder bare dersom resten er 1.

    Sjekk denne siden for en fullstendig dokumentasjon på International Bank Account Numbers



    Trinn 21:. IBAN Sjekk

    Kode

    Lim eller skriv inn følgende kode i vår Validator klassen like etter validateISBN13
    metode:
    offentlig funksjon validateIBAN (IBAN: String): boolske {var nums: Objekt = {A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, G: 16, H: 17, I: 18, J: 19, K: 20, l: 21 M: 22, N: 23, O: 24, P: 25, Q: 26 R: 27 S: 28, T: 29, U: 30, V: 31, B: 32, X: 33, Y : 34, Z: 35}; Var chars: Array = iban.split (''); for (var i: int = 0; i < 4; i ++) {chars.push (chars.shift ()); } Var exp: RegExp = /[a-z] /i; for (var j: int = 0; j < chars.length; j ++) {chars [J] = exp.test (chars [J])? nums [chars [j] .toUpperCase ()]: chars [j]; } IBAN = chars.join (''); avkastning modulus (IBAN, 97) == 1;}
    Forklaring

    nums
    objekt inneholder det tilsvarende tallet for hver karakter:
    Var nums: Object = {A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, G: 16, H: 17, I: 18, J: 19, K: 20, l: 21, M: 22, N: 23, O: 24, P: 25, Q: 26 R: 27 S: 28, T: 29, U: 30, V: 31, B: 32, X: 33, Y: 34, Z: 35};

    chars
    matrise inneholder tegnene i antall:
    Var chars: Array = iban.split ('');

    Med den første for-loop beveger vi oss fire første tegnene på baksiden ved å fjerne dem fra begynnelsen av tabellen og plassere dem på baksiden:
    for (var i: int = 0; i < 4; i ++) {chars.push (chars.shift ( ));}

    exp
    regulært uttrykk er et enkelt mønster for bokstaver brukes til å teste hvert element i chars
    utvalg:
    Var exp: RegExp = /[ ,,,0],az] /i;

    I den andre for-loop vi sjekke hver karakter i chars
    utvalg for å se om det er et brev, og endre den til det tilsvarende tall ved hjelp av nums Anmeldelser objekt:
    for (var j: int = 0; j < chars.length; j ++) {chars [J] = exp.test (chars [j])? nums [chars [j] .toUpperCase ()]: chars [j];}

    Etter å konvertere hver bokstav i et antall vi forvandle array til en streng og tilordne den til IBAN
    variabel:
    iban = chars.join ('');.

    Til slutt vi tilbake hvis resten av divisjonen med 97 i antall er lik 1 eller ikke
    returnere modulus (iban, 97) == 1;

    Du lurer kanskje på hvorfor jeg har brukt en egendefinert funksjon i stedet for "%" operator. Vel ... hvis du tenker over det, har antallet 20+ sifre (stor) og normal modulus operatør vil ikke fungere som forventet. Så vi trenger å definere en måte å beregne modulus for store tall.

    Modulus
    Funksjon

    For å beregne modulus av store tallene jeg har brukt en implementering av den "splitt og hersk" metoden. For å holde det kort denne fremgangsmåte subtraherer en del av det store antall og gjør modulen til den del, hvoretter den føyer resultatet til den gjenværende del av det store antall. For en nærmere presentasjon av denne metoden se denne linken

    Kopier eller skriv inn følgende kode i Validator
    klasse rett etter validateISBN
    metode.
    Offentlig funksjon modulus (largenumber: String, mod: uint): Antall {var tmp: String = largeNumber.substr (0, 10); Var Nummer: String = largeNumber.substr (tmp.length); Var resultat: String; gjøre {resultat = String (Number (tmp)% mod); antall = resultat + nummer, tmp = number.substr (0, 10); antall = number.substr (tmp.length); } While (number.length > 0); returnere Number (tmp)% mod;}

    tmp
    variable lagrer en del av det store antallet ved å trekke 10 tegn fra det:
    Var tmp: String = largeNumber.substr (0, 10 );

    antall
    variabel representerer det store antallet som blir trimmet av lengden på tmp
    streng:
    Var Nummer: String = largeNumber.substr (tmp.length );

    resultat
    variabel vil selvsagt holde resultatet av divisjonen. I do-while-loop beregne vi resten for delingen av tmp nummer av mod
    heltall (dele) og tildele verdi til resultatet:
    resultat = String (Number (tmp) % mod);

    Vi legger til resultatet i begynnelsen av det store antallet og gjenta de tidligere tre trinnene mens antall lengden er større enn 0:
    nummer = resultat + nummer, tmp = number.substr (0, 10), antall = number.substr (tmp.length);

    Og til slutt vi tilbake resultatet av modulus



    Trinn 22: IBAN Gjennomføring

    For videre lesning. se bankkortnummer og Luhn algoritme wiki-sider



    Trinn 24: kortnummer Sjekk

    Kode

    Lim eller skriv inn følgende kode i vår Validator klassen bare etter validateIBAN
    metode:
    offentlig funksjon validateCardNumber (ccNumber: String): Boolean {var American: RegExp = /^ (34 | 37) ([0-9] {13}) $ /x; Var dinnersClub: RegExp = /^ (30 [0-5]) ([0-9] {13}) $ /x; Var MasterCard: RegExp = /^ (5 [1-5]) ([0-9] {14}) $ /x; Var visum: RegExp = /^ 4 ([0-9] {12} | [0-9] {15}) $ /x; Var gyldig: Boolean; ccNumber = ccNumber.match (/\\ d /g) .join (''); if (americanExpress.test (ccNumber) || dinnersClub.test (ccNumber) || masterCard.test (ccNumber) || visa.test (ccNumber)) gyldig = true; returnere gyldig & & luhnChecksum (ccNumber);}
    Forklaring

    American
    vanlige uttrykket definerer mønsteret brukes til å sjekke American Express kort nummer. Dette vil se etter tall som begynner med 34 eller 37 og har 13 flere sifre:
    Var American: RegExp = /^ (34 | 37) ([0-9] {13}) $ /x;

    < em> dinnersClub
    vanlige uttrykket definerer mønsteret brukes til å sjekke Dinners Club kort nummer. Dette mønsteret sjekker om et kredittkortnummer begynner med et tall mellom 300-305 og har 13 flere sifre:
    Var dinnersClub: RegExp = /^ (30 [0-5]) ([0-9] {13} ) $ /x;

    MasterCard
    vanlig uttrykk definerer patter for MasterCard kortnumre. Dette mønsteret vil sjekke om kredittkortnummer begynner med et tall mellom 51 og 55 og slutter med 14 flere sifre:
    Var MasterCard: RegExp = /^ (5 [1-5]) ([0-9] {14 }) $ /x;

    visa
    vanlige uttrykket definerer mønsteret for Visa /Visa Electron-kort nummer. Dette vil sjekke om det medfølgende kortnummeret starter med fire og slutter med 12 eller 15 modus sifre:
    Var visa: RegExp = /^ 4 ([0-9] {12} | [0-9] {15}) $ /x;

    Vi bruker den utvidede modifier ("x") i alle uttrykk, slik at mellomrom vil bli ignorert fra. Dette brukes bare for å gjøre uttrykket lettere å lese.

    Den boolske variabelen gyldig
    vil holde gyldighetsstatus av kortnummeret.

    På den sjette linjen vi trekke ut sifrene fra vår nummer (nummeret er vanligvis skrevet med bindestrek eller mellomrom for lesbarhet formål):
    ccNumber = ccNumber.match (/\\ d /g) .join ('');

    I hvis setningen vi sjekke om antall matcher noen av de fire mønstre definert tidligere:
    if (americanExpress.test (ccNumber) || dinnersClub.test (ccNumber) || masterCard.test (ccNumber) || visa.test (ccNumber)) gyldig = true;

    På den siste linjen vi returnere true hvis tallet er gyldig og sender Luhn checksum

    Den Luhn Algoritmen

    Skriv inn eller lim inn følgende kode etter validateCardNumber
    metode i vår Validator
    Klasse:
    offentlig funksjon luhnChecksum (antall: String): boolske {var sifre: Array = number.split (''); Var start: uint = (number.length% 2 == 0)? 0: 1; Var sum: int; while (starte < digits.length) {sifre [start] = uint (sifre [start]) * 2; start + = 2; } Siffer = digits.join ('') split. (''); for (var i: uint = 0; i < digits.length, jeg ++) {sum + = uint (sifre [i]); } Avkastning (sum% 10 == 0);}

    sifre
    variabelen inneholder sifrene i nummeret. start
    variabelen brukes til å definere hvor sifret å starte dobling (dette er representert ved indeks sifre array). sum
    variabel holder den totale summen. Vi bruker den mens loop å doble hver andre siffer i rekken. Vi også legge til 2 til start til variabel for å hoppe på alle andre siffer i rekken:
    mens (start < digits.length) {sifre [start] = uint (sifre [start]) * 2; starte + = 2;}

    På neste linje vi forandre sifrene
    matrise til en streng og dele den på nytt inn i en matrise. Vi gjør dette fordi hvis doblet tallene er større enn 9 må vi oppsummere sifrene (f.eks for 12 gjør vi 1 + 2): '. Split
    siffer = digits.join (') ('');

    I for-loop vi bare oppsummere alle sifrene:
    for (var i: uint = 0; i < digits.length, jeg ++) {sum + = uint (sifre [i]);}

    Og slutt sjekker vi om resten er 0 og returnere true eller false ellers:
    returnere (sum% 10 == 0);



    Trinn 25: kortnummer Implementering

    Merk :
    For mer detaljerte instruksjoner kan du se trinn 4.

    Åpne Validator.fla
    , lage en ny forekomst av TextBox
    filmklipp og gi det en forekomst navn av cardNumberField

    Opprett en statisk tekst Feltet over TextBox og skrive i det "kortnummeret:".

    Skriv inn følgende kode på linje 40.
    case cardNumberField.input_txt: gyldig = validator.validateCreditCardNumber (input); break;.

    Dette vil sjekke inngangsdata i cardNumberField
    TextBox som et kortnummer ved hjelp av validator
    forekomst av Validator
    klasse
    < p> Test filmen, og skriv en kort nummer nummer i tekstfeltet merket med "kortnummer"



    Final kode

    Nå er dette hvordan vår siste klasse ser ut:.
    pakken {public class Validator {offentlig funksjon Validator () {trace ('Validator opprettet'); } /** * Validerer en dato i disse to formater: * * DD MM ÅÅÅÅ * MM DD YYYY * * De gyldige separatorer er bindestrek "-", prikk, foran skråstrek "/" og plass "" ".". * *param Dato Datoen skal valideres. *return Returnerer sann hvis datoen er gyldig eller usann ellers. * /Public funksjon checkDate (dato: String): Boolean {var måneden: String = "(0 [1-9] | 1 [012]?)"; Var dagen: String = "(0 [1-9] | [12] [0-9] | 3 [01]?)"; Var år: String = "([1-9] [0-9] {3})"; Var separator: String = "([. \\ /-] {1})"; Var usDate: RegExp = new RegExp ("^" + måned + separator + dag + "\\\\ 2" + år + "$"); Var ukDate: RegExp = new RegExp ("^" + dag + separator + måned + "\\\\ 2" + år + "$"); avkastning (usDate.test (dato) || ukDate.test (dato) til stede:? false); } /** * Validerer en e-postadresse. Adressen skal ha følgende * format: * * [user] @ [domenenavn] [domain_extension] * *param emailAddress *return Returnerer sann hvis adressen er gyldig eller usann ellers.. * /Public funksjon checkEmailAddress (emailAddress: String): Boolean {var adresse: String = "([a-Z0-9 ._-] +)"; Var domenenavn: String = "([a-Z0-9 .-] +)"; Var domainExt: String = "(com | net | org | info | tv | mobi | museum | gov | biz | tlf | navn | edu | asia | reise | pro)"; Var epost: RegExp = new RegExp ("^" + adresse + "@" + domenenavn + "\\\\.» + domainExt + "$", "i"); returnere email.test (emailAddress); } /** * Validerer en nettadresse. Adressen skal ha følgende * format: * * [protokoll: //(valgfritt)] [domenenavn] [domain_extension] * *param adresse Webadressen som skal kontrolleres.. *return Returnerer sann hvis adressen er gyldig eller usann ellers. * /Public funksjon checkWebAddress (adresse: String): Boolean {var protokollen: String = "(? Http: \\ /\\ /| ftp: \\ /\\ /)?"; Var domenenavn: String = "([a-Z0-9 .-] {2})"; Var domainExt: String = "(com | net | org | info | tv | mobi | museum | gov | biz | tlf | navn | edu | asia | reise | pro)"; Var nettet: RegExp = new RegExp ('^' + protokoll + + domenenavn + "\\." + domainExt + '$', "i" '?'); returnere web.test (adresse); } /** * Validerer et telefonnummer. Telefonnummeret skal ha følgende * format: * * [country (valgfritt)] [XXX] [YYY] [ZZZZ] * * skilleark mellom X, Y og Z er valgfrie. * Gyldige separatorer er bindestrek "-", punktum "." og space "". * *param Telefonnummer Telefonnummeret som skal kontrolleres. *return Returnerer sann hvis antall er gyldig eller usann ellers. * /Public funksjon checkPhoneNumber (telefonnummer: String): Boolean {var country: String = "((\\\\ + | 00) ([1-9] | [1-9] [0-9] | [1-9 ] [0-9] {2})) "; Var num: String = "([0-9] {3,10})"; telefonnummer = phoneNumber.match (/[\\ + \\ d] /g) .join (''); Var telefon: RegExp = new RegExp ("^" + country + num + "$"); returnere phone.test (telefonnummer); } /** * Sjekker om en ISBN-10 nummer passerer sjekksummen. * *param ISBN10 Den ISBN-10 nummer for å få den godkjent. *return Returnerer sann hvis antall er gyldig eller usann ellers. * /Public funksjon validateISBN10 (ISBN10: String): Boolean {ISBN10 = isbn10.replace (/[-] /g, ''); if (isbn10.length = 10!) {return false; } else {var gyldig: Boolean; Var vekter: Array = [10, 9, 8, 7, 6, 5, 4, 3, 2]; Var sifre: Array = isbn10.split (''); Var kontroll: String = digits.pop (); Var resultat: uint = 0; gå i stykker; gå i stykker;