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.
< 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 Interface På Action Den første linjen representerer en forekomst av vår fremtid Validator 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 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 Nå la oss komme til kodingen Først opprette en ny Actionscript-fil og gi den navnet Validator.as Lim eller skriv inn følgende kode: 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 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. 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 Først av alt vi trenger for å sjekke for å se om datoformatet er riktig. Lim eller skriv inn følgende kode i Validator Den første linjen i funksjonen representerer mønsteret brukes til å sjekke måned: 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: 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: 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 De to variablene usDate Hotell og ukDate Dette vil sjekke for å se om en gyldig måned ukDate 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) Åpne Validator.fla filen gitt i kildefilene. Velg Interface 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. Lim eller skriv inn følgende kode i vår Validator klassen like etter checkEmailAddress Den første linjen definerer mønsteret brukes til å sjekke protokollen. Vanligvis kan dette være valgfritt (avhengig av saken): Den andre variabelen definert representerer domenet navngi mønster. Et gyldig domenenavn og underdomene navn bare inneholder alfanumeriske tegn, punktum "." og bindestrek "-": 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): For å gjøre innsjekkingen enda mer streng kan du sjekke om TLD er en eksisterende: Dette er bare noen få generiske toppdomener. Du kan se hvordan dette blir ganske lenge du legge til flere og flere toppdomener. web Som i tilfellet av e-post adresse webadresser er små bokstaver, slik at vi bruke "i" (små bokstaver) modifier 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 Lim eller skriv inn følgende kode i vår Validator klassen like etter checkWebAddress 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): Den andre variabelen representerer det faktiske antallet. Vi vil gjøre det for å se etter en rekke med 3 til 10 sifre: På den tredje linjen vi strippe våre telefonnummer av noen ekstra mellomrom eller skilletegn holder bare på "+" tegn og sifre: telefon Den siste linjen returnerer resultatet av testing av mønster over den medfølgende telefonnummeret. Enkelt nok, ikke sant 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 Lim eller skriv følgende kode på Validator 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: I annet I Sifrene 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 I neste linje med kode kontrollerer vi resten av summen med hensyn til 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; Neste vi sjekke resultatet med en bryter uttalelse og gi verdien til gyldig Og til slutt vi tilbake resultatet av testen Lim eller skriv inn følgende kode i Validator sifre vekt 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 Til slutt gjør vi divisjon med 10 av summen. Hvis det er 0 resultatet er 0 annet vi trekke fra resten fra 10: Hvis resultatet sifferet er den samme som kontroll sifret antall er gyldig Åpne Validator.fla Hotell og modifisere koden på linjene 34 til 36 som så: 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 International Bank Account Number eller IBAN for kort er en internasjonal standard for nummerering bankkontoer. Dette består av følgende: Tallet gjelder bare dersom resten er 1. Sjekk denne siden for en fullstendig dokumentasjon på International Bank Account Numbers Lim eller skriv inn følgende kode i vår Validator klassen like etter validateISBN13 nums chars 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: exp I den andre for-loop vi sjekke hver karakter i chars Etter å konvertere hver bokstav i et antall vi forvandle array til en streng og tilordne den til IBAN Til slutt vi tilbake hvis resten av divisjonen med 97 i antall er lik 1 eller ikke 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. 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 tmp antall resultat Vi legger til resultatet i begynnelsen av det store antallet og gjenta de tidligere tre trinnene mens antall lengden er større enn 0: Og til slutt vi tilbake resultatet av modulus For videre lesning. se bankkortnummer og Luhn algoritme wiki-sider Lim eller skriv inn følgende kode i vår Validator klassen bare etter validateIBAN American < em> dinnersClub MasterCard visa 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 På den sjette linjen vi trekke ut sifrene fra vår nummer (nummeret er vanligvis skrevet med bindestrek eller mellomrom for lesbarhet formål): I hvis setningen vi sjekke om antall matcher noen av de fire mønstre definert tidligere: På den siste linjen vi returnere true hvis tallet er gyldig og sender Luhn checksum Skriv inn eller lim inn følgende kode etter sifre På neste linje vi forandre sifrene I for-loop vi bare oppsummere alle sifrene: Og slutt sjekker vi om resten er 0 og returnere true eller false ellers: Merk : Åpne Validator.fla Opprett en statisk tekst Feltet over TextBox og skrive i det "kortnummeret:". Skriv inn følgende kode på linje 40. Dette vil sjekke inngangsdata i cardNumberField Nå er dette hvordan vår siste klasse ser ut:.
fil i begynne mappen på Source nedlasting, vil du finne to rammer: en låst, heter Actionanmeldelser og en annen som heter Interface
.
laget er tom. Der vil vi legge våre tekstbokser som brukes til data input
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');}
klasse. Vi vil bruke et eget AS fil til å inneholde denne klassen, slik at den kan brukes i andre prosjekter.
funksjonen kalles på hver ramme når et tekstfelt har fokus på validere data i den.
. Denne har en inngang Textfield med en forekomst navn input_txt Hotell og annen MovieClip heter validTick
med to rammer merket "gyldig" og "ugyldig".
Trinn 1:. Forberedelser
pakken {public class Validator {offentlig funksjon Validator () {trace ('Validator opprettet'); }}}
Trinn 2:. Calendar Dato Struktur
Den britiske dato uttrykkes som DD-MM-ÅÅÅÅ.
Den amerikanske datoen er uttrykt som MM-DD-ÅÅÅÅ.
Trinn 3:.. Calendar Dato Check
Kode
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
Var måned: String = "(0 [1-9] | 1 [012]?)";
Var dag. String = "(0 [1-9] | [12] [0-9] | 3 [01]?)";
Var år: String = "([1-9] [0-9] {3})";
sjekker bare hvis en av disse fire separatorer brukes: bindestrek "-", prikk, foran skråstrek "/" og white space ""
".".
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 + "$");
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.
uttrykk har samme effekt. Den eneste forskjellen er at det vil sjekke for dag
i begynnelsen av strengen.
Trinn 4:. Calendar Dato Gjennomføring
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
.
Trinn 9: Web Address Sjekk
Kode
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
Var protokoll: String = "(? Http: \\ /\\ /| ftp: \\ /\\ /)?";
Var domenenavn: String = "([a-Z0-9 .-] {2})";
Var domainExt: String = "([a] {2,6})";
Var domainExt: String = "(com | net | org | info | tv | mobi | museum | gov | biz | tel | navn | edu | asia | reise | pro) ";
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" '?');
Trinn 10:. Web Address Gjennomføring
Trinn 12:. Telefonnummer Sjekk
Kode
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
Var protokoll: String = "(http: \\ /\\ /| ftp: \\ /\\ /)?";
Var num: String = "([0-9] {3,10})";
Telefonnummer = phoneNumber.match (/[\\ + \\ d] /g) .join ('');
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 + "$");
Trinn 13: Telefonnummer Implementering
Trinn 15:. ISBN-10 Sjekk
Kode
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
ISBN10 = isbn10.replace (/[-] /g, ''); if (isbn10.length = 10) {return false;}
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];
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;
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];}
resultat = (resultat 11% == 0) 0: (11 - resultatet? % 11);
. Hvis betingelsen er sann verdi1 vil bli gitt til den variable ellers vil motta verdi2.
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;}
Trinn 16:. ISBN-10 Gjennomføring
Trinn 18: ISBN-13 Sjekk
Kode
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
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 ();
variabel vil holde nåværende vekt av et siffer og resultere
variabel vil holde resultatet av sjekksum:
Var vekt : UINT; Var resultat: uint;
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];
resultat = (resultat% 10 == 0) 0: (10 - Resultatet% 10); avkastning (resultat == kontroll);
Trinn 19:. ISBN-13 Gjennomføring
tilfelle ISBNField.input_txt: gyldig = validator.validateISBN10 (input) || validator.validateISBN13 (input); bryte;
Trinn 20:. IBAN Struktur
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.
Trinn 21:. IBAN Sjekk
Kode
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
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};
matrise inneholder tegnene i antall:
Var chars: Array = iban.split ('');
for (var i: int = 0; i < 4; i ++) {chars.push (chars.shift ( ));}
regulært uttrykk er et enkelt mønster for bokstaver brukes til å teste hvert element i chars
utvalg:
Var exp: RegExp = /[ ,,,0],az] /i;
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];}
variabel:
iban = chars.join ('');.
returnere modulus (iban, 97) == 1;
Modulus
Funksjon
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;}
variable lagrer en del av det store antallet ved å trekke 10 tegn fra det:
Var tmp: String = largeNumber.substr (0, 10 );
variabel representerer det store antallet som blir trimmet av lengden på tmp
streng:
Var Nummer: String = largeNumber.substr (tmp.length );
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);
nummer = resultat + nummer, tmp = number.substr (0, 10), antall = number.substr (tmp.length);
Trinn 22: IBAN Gjennomføring
Trinn 24: kortnummer Sjekk
Kode
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
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;
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;
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;
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;
vil holde gyldighetsstatus av kortnummeret.
ccNumber = ccNumber.match (/\\ d /g) .join ('');
if (americanExpress.test (ccNumber) || dinnersClub.test (ccNumber) || masterCard.test (ccNumber) || visa.test (ccNumber)) gyldig = true;
Den Luhn Algoritmen
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);}
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;}
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 (') ('');
for (var i: uint = 0; i < digits.length, jeg ++) {sum + = uint (sifre [i]);}
returnere (sum% 10 == 0);
Trinn 25: kortnummer Implementering
For mer detaljerte instruksjoner kan du se trinn 4.
, lage en ny forekomst av TextBox
filmklipp og gi det en forekomst navn av cardNumberField
case cardNumberField.input_txt: gyldig = validator.validateCreditCardNumber (input); break;.
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
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;