Avatar billede googolplex Novice
08. januar 2004 - 21:02 Der er 19 kommentarer og
1 løsning

Regex's til javascript & PHP

Jeg skal bruge en række regular expression, der skal bruges både til serverside -og clientside validering:

Serverside (PHP) skal de bruges i en standard ereg() og clienside (javascript) skal de bruges således:

if (field.value.match(regex)) // osv

Jeg er ikke helt sikker på, om man kan bruge nøjagtig de samme regex til både PHP og javascript, men det håber jeg - ellers vil jeg gerne høre om det :)

Jeg skal bruge følgende regex's:

Postnummer (4 tegn, kun tal)
Navn (2-50 tegn, kun bogstaver)
Tlf1 (8 tegn, kun tal)
Tlf2 (8-11 tegn, tal samt evt. '+' i STARTEN)
CPR# (0808621122 eller 08-08-62-1122)
Adresse (2-100 tegn, tal, bogstaver samt '.' (ol.)) - Er ikke helt sikker på denne

Brugernavn (5-10 tegn, ingen specialtegn)
Email
Url

Skriv venligst kun hvis I er 100% sikre (hvis man kan være det med en regex :P)
Avatar billede roenving Novice
08. januar 2004 - 21:26 #1
Løsninger (-- og spørgsmål !-):

Postnummer: /^\d{1,4}$/ 1-4 tegn, så den accepterer ved første tastning
Navn: Hvad med mellemrum, forkortede mellemnavne, sammensatte navne og bogstaver med accenter ol. ?-)
/^[\w \,\.\-]{1,2}[\w \,\.\-]{0,48}$/i Accepterer word-characters, altså også tal og _
Tlf1: /^\d{1,8}$/
Tlf2: /^\+?\d{1,11}$/
CPR#: /^\d{1,2}\-?\d{0,2}\-?\d{0,2}\-?\d{0,4}$/
Adresse: /^[\w\.\,\- ]{1,2}[\w\.\,\- ]{0,98}$/i

Brugernavn: /^[a-z0-9]{1,5}[a-z0-9]{0,5}$/i i = case Insensitive

Email: Hvor nøjagtigt ?-) For der er en række mærkværdigheder, man kan tage højde for ...
/^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i kan acceptere visse ugyldige email-adresser
-- og den bliver svær at lave enløbende evaluering på, så det har jeg ikke forsøgt på (hvis du fjerner ^ og $ vil en match dog virke løbende !-)
URL: Samme som email ...
/^(http:\/\/)?(www\.)?[a-z0-9]+\.\w{1,2}\w*(\.\w{1,2}\w*)*$/i
-- og samme kommentar som email ...

-- de fleste af ovenstående er varianter af nogen, jeg har prøvet og testet i javascript, men de er ikke aktuelt testet mod dit scenario, ligesom jeg ikke ved om der lige i disse skulle være varianter i php ...
Avatar billede roenving Novice
08. januar 2004 - 21:28 #2
Hov ...

Tlf2: /^\+?\d{0,11}$/
Avatar billede googolplex Novice
08. januar 2004 - 21:36 #3
Postnummer: Skal kun accepterer 4 tegn :)

for/mellem/efter navn: Jeg har ikke helt gennemtænkt denne, men tal skal IKKE godkendes! Har heller aldrig hørt om nogen med _ i deres rigtige navn så den skal også ud :)

Email/Url skal være SIMPLE udgaver :)
Avatar billede roenving Novice
08. januar 2004 - 21:42 #4
Da dit scenario er indtastningen _og_ du vil kunne sætte begrænsninger på længden kender jeg ikke andre metoder, endt at sætte muligheden for at skrive det ene tegn også !-)

Jeg har ikke rigtig brug negeringen, så den har jeg heller ikke testet på, men noget i stil med:

\w[^0-9_] i stedet for \w
Avatar billede googolplex Novice
08. januar 2004 - 21:45 #5
Jamen, der er vel ikke noget i vejen for at den først godkender (løbende) efter 4 tegn ?

Er det ikke bare:

/^\d{4}$/      ??

Er // inkapslingen i javascript ?
Avatar billede googolplex Novice
08. januar 2004 - 21:46 #6
Inde på surftown.dk har de forresten brugt en lignende model som den jeg er ved at lave, du kan se under oprettelse af hotellet.
Avatar billede roenving Novice
08. januar 2004 - 21:55 #7
oki, du vil have den til at fejl-markere, til den er korrekt ?-)

Postnummer: /^\d{4}$/
Navn: /^[\w[^0-9_] \,\.\-]{2,50}$/i
Tlf1: /^\d{8}$/
Tlf2: /^\+?\d{8,11}$/
CPR#: /^\d{2}\-?\d{2}\-?\d{2}\-?\d{4}$/
Adresse: /^[\w\.\,\- ]{2,100}$/i

Brugernavn: /^[a-z0-9]{5,10}$/i i = case Insensitive

Email: /^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i kan acceptere visse ugyldige email-adresser

URL: /^(http:\/\/)?(www\.)?[a-z0-9]+\.\w{1,2}\w*(\.\w{1,2}\w*)*$/i

Email og url er den udvidede udgave af de simple ...

Eks. email accepterer:
minimum 1 word-character, et eller flere w eller .- (accepterer også de ugyldige .. .- og lignende), @, min 1 w, et eller flere w eller - (også ugyldige --), . og mindst 2 w (også ugyldige med tal)
Avatar billede googolplex Novice
08. januar 2004 - 21:59 #8
'oki, du vil have den til at fejl-markere, til den er korrekt ?-)'

Ja, præcis, men det bliver ikke som du tror, jeg kobler det sammen med serverside og så bliver det smart skal du bare se ;)
Avatar billede roenving Novice
08. januar 2004 - 22:08 #9
Ja, jeg havde ikke tænkt den sådan !-)
Avatar billede googolplex Novice
09. januar 2004 - 00:11 #10
To ting:

1. Er // det man bruger til at afgrænse regex i javascript ?

2 Har lige strikket følgende sammen, men det funker ikke, hvad gør jeg galt:

<html>
<head>

<script type="text/javascript">

function validate(field, regex, style1, style2)
{
    if (field.value.match(regex))
    {
        field.style.cssText="style1";
    }
    else
    {
        field.style.cssText="style2";
    }
}

</script>

</head>

<body>

<form action="/valideringstest01.php">
Postnummer <input type="text" name="field" onkeyup="validate(this,'/^\d{4}$/','font-color: red','font-color: blue')" />
</form>
</body>
</html>
Avatar billede roenving Novice
09. januar 2004 - 00:28 #11
Såvidt jeg kan se var der flere småfejl:

<html>
<head>

<script type="text/javascript">

function validate(field, regex, style1, style2)
{
    if (field.value.match(regex))
    {
        field.style.cssText=style1;
    }
    else
    {
        field.style.cssText=style2;
    }
}

</script>

</head>

<body>

<form action="/valideringstest01.php">
Postnummer <input type="text" name="field" onkeyup="validate(this,/^\d{4}$/,'color: red','color: blue')" />
</form>
</body>
</html>

// er faktisk streng-delimiter på en RegExp i javascript
text-farve hedder color

-- og da der ikke skal yderligere streng-delimiter på RegExp'en skal der selvfølgelig heller ikke gnyffer på i funktionen !-)
Avatar billede googolplex Novice
09. januar 2004 - 00:36 #12
Der var den :)

Havde faktisk rettet det med color (doh), men tak for rettelserne. Tjekker lige igennem i løbet af de næste par dage :)
Avatar billede googolplex Novice
09. januar 2004 - 00:40 #13
Det er noget i denne her stil jeg gerne ville have, det fungere jo fint :)

http://googolplex.dk/valideringstest.php
Avatar billede roenving Novice
09. januar 2004 - 00:43 #14
Muy Bueno !-)
Avatar billede Slettet bruger
09. januar 2004 - 05:13 #15
Jeg har lige et par tilføjelser til email-check, da den blandt andet ikke godtager plus i bruger-delen, og kun accepterer et enkelt punktum i host-delen.
Email: /^\w{1}[\w\.\-\+]*@(\w{1}[\w\-]*\.)+\w{2}\w*$/i

Med disse ændringer, vil den adresse, jeg bruger her på E også blive accepteret ;-)
Avatar billede googolplex Novice
09. januar 2004 - 14:45 #16
Lige et sidespørgsmål:

Jeg har:

<input type="submit" name="submit" value="Send" disabled="disabled" />

Hvordan får jeg kombineret det med mit system/funktion, så når alle felterne er udfyldt, så fjernes disabled="disabled" ?

http://googolplex.dk/valideringstest.php
Avatar billede googolplex Novice
09. januar 2004 - 23:59 #17
Har du et forslag/en idé til hvordan jeg løser ovenstående ?

Husk at lægge et svar :)
Avatar billede roenving Novice
10. januar 2004 - 01:13 #18
<script type="text/javascript">

var flds = ['Postnummer','navn','Tlf1','Tlf2','CPR','Adresse','Brugernavn','Email','Url']; // name of fields to validate
for(i=0;flds.length>i;i++)flds[i]=false;

function validate(field, regex, style1, style2){
    if (field.value.match(regex)){
        field.style.cssText=style1;
        flds[field.name] = true;
    }else{
        field.style.cssText=style2;
        flds[field.name] = false;
    }
    checkSubmit(field);
}

function checkSubmit(fld){
var ok = true;
for(i=0;flds.length>i;i++)ok = ok && flds[i];
fld.form.submit.disabled = !ok;
}
</script>

-- og så velbekomme '-)
Avatar billede googolplex Novice
10. januar 2004 - 07:20 #19
Jeg kigger på det :)

Takker endnu engang for hjælpen, uden din ekspertise var jeg jo stadigvæk huleboer :P
Avatar billede roenving Novice
10. januar 2004 - 12:08 #20
-- og jeg takker for points ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester