Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Regular expression (PHP)

Sivun loppuun

late [16.10.2013 21:02:47]

#

Hei, mistä löytyisi kattava tutoriaali säännöllisille lausekkeille. (putkassa toki yksi).

- Haluaisin tarkistaa etunimen ja sukunimen (3-15 kirjainta, a-ö)
- Sähköpostiosoitteen (@ ja .)

Mielestäni voisi olla joku paikka mistä saa nopeasti näitä lausekkeita. Esim. nimeen välilyönti, väliviiva, minimipituus, ä, ö jne. Nyt käytän näitä HTML5-lomakkeiden PATTERN -atribuutissa.

<label for="FirstName">Etunimi</label>
<input type="text" name="FirstName" placeholder="Lauri" id="FirstName" maxlength="15" pattern="^[a-zA-Z]{3,16}$" class="validateLocally" required />
<span class="errors"></span>

The Alchemist [16.10.2013 21:14:48]

#

Käyttäisin kyllä class-attribuutin sijaan vaikka data-validate-attribuuttia merkitsemään kenttiä, jotka pitää js:llä validoida. Toisaalta kun tarkemmin miettii, niin eikös kaikki kentät pidä validoida? Tai ainakin ne, joilla on html5:n validointiattribuutteja? Silloinhan voit yksinkertaisesti iteroida kaikkien inputtien yli ja katsoa, löytyykö tuollaisia attribuutteja, ja validoida niiden perusteella tai sitten hyväksyä kaikki syötteet.

late [16.10.2013 21:21:16]

#

Puhummeko nyt samasta asiasta. Eli etsin Regular Expressioneja.. esim. tuo etunimi, sukunimi. Toki kaikki pakolliset kentät tarkistetaan. En nyt todellakaan jaksaisi alkaa itse tekemään joka lausetta.

pattern="^[a-zA-Z]{3,16}$"

Ylläoleva toimii muuten, mutta kun laittaa: ä tai ö niin homma ei toimi. Ei myöskään väliviiva koska en sitä osaa tarkistaa. Ajattelin vaan jos jossain olisi hyviä valmiita suomi tarkoitukseen.

Metabolix [16.10.2013 21:42:38]

#

Liian tiukka tarkistaminen on typerää. Esimerkiksi millä ihmeen perusteella rajoitat etunimen pituutta ja merkistöä noin? Väestörekisterikeskuksen hausta löytyy paljonkin yksi- ja kaksimerkkisiä etunimiä (mm. Li), ja vastaavasti näyttää löytyvän myös yli 16-merkkisiä nimiä (mm. Risto-Aleksanteri). Monissa nimissä on väliviivojen ja ääkkösten lisäksi erilaisia tarkkeita (mm. Léa) ja vielä harvinaisempia merkkejä (mm. Jørgen).

Siis käytännössä lienee viisainta tarkistaa vain, että kenttä ei ole tyhjä.

Itse kysymykseesi säännöllisistä lausekkeista sanon vain, että opettele tekemään itse tai etsi Googlella jokin sivusto. Kuitenkin mieti myös tarkkaan, oletko ihan täysin varma, että lauseke on tarkoitukseesi oikea.

Hennkka [16.10.2013 22:00:53]

#

Tällä sivulla kerrotaan, miten voidaan käyttää regexejä unicoden kanssa. Esimerkiksi nimien tarkistaminen onnistuu seuraavanlaisella regexillä:

^            # Alku
  [
    \p{L}    # Kirjaimet
    \p{Mn}   # Aksentit
    \p{Pd}   # Viivat
    \'       # Heittomerkki
    \x{2019} # Toisenlainen heittomerkki
  ]+         # Ainakin yksi merkki
$            # Loppu

Lähde: http://stackoverflow.com/questions/5963228/regex-for-names-with-special-characters-unicode

Valitettavasti unocode-regexit toimivat vain PHP:ssä, mutteivät html5:ssä tai javascriptissä. Niihin kelvannee esitarkistukseksi esimerkiksi tällainen:

^
  [^        # Kaikki merkit, paitsi
    \d      # Numerot
    \s      # Välit
  ]+
$

Muista kuitenkin tarkistaa käyttäjän lähettämän tiedon validius myös palvelimen päässä!

late [16.10.2013 22:07:48]

#

No kiitos näistä. Taidan sitten tarkistaa vain onko kenttä tyhjä (etunimi, sukunimi). Sähköpostiosoite (@ ja .) ja salasanan kanssa vertaan toisiinsa (salasana syötetään 2 kertaan).

Voisin opetella noita lausekkeita, mutta en ole koskaan niistä pitänyt. Jotenkin todella vastenmielistä kehitellä tuollaisista merkeistä, jotain tarkistuksia.

Yucca [16.10.2013 23:03:00]

#

late kirjoitti:

Taidan sitten tarkistaa vain onko kenttä tyhjä (etunimi, sukunimi).

Huomattavasti realistisempaa. Tosin kaikilla ihmisillä ei ole sukunimeä (esimerkiksi ei useimmilla islantilaisilla). Ihmisen nimi kannattaa lukea yhtenä kenttänä, ellei ole pakko lukea sitä osina (esimerkiksi tietokantaan tarvitaan etu- ja sukunimi erikseen, jolloin on parempi kysyä ne erikseen kuin arpoa käyttäjän syötteestä, mikä osa siinä on mitäkin).

Se, missä muodossa tiedot tarvitaan, riippuu tietojen käyttötarkoituksesta. Ja sehän on lain mukaan kuvattava henkilörekisteriselosteessa.

lainaus:

Sähköpostiosoite (@ ja .) ja salasanan kanssa vertaan toisiinsa (salasana syötetään 2 kertaan).

Sähköpostiosoite kannattaa mieluummin lukea siihen tarkoitetulla HTML5-tavalla, input type=email, kuin ruveta virittämään omaa pattern-määritettä.

Salasanakentän osalta kannattaa miettiä, mitä merkkejä siinä halutaan sallia. Ei ole välttämättä käyttäjäystävällistä sallia kaikenlaista, koska käyttäjä ei ehkä tule ajatelleeksi, että edes ä:n kirjoittaminen kaikenlaisilla näppäimistöillä ei ole triviaalia.

late [17.10.2013 10:14:54]

#

Suurkiitos pointeista. Teen nyt niin että ensin HTML5 "required" tarkistaa onko kenttä tyhjä. Vaaditaan vähintään 1 merkki. Sitten jQuery tarkistaa onko kenttä tyhjä.

- etunimi
- sukunimi

HTML5 (required)

 <li>
    <label for="FirstName">Etunimi</label>
    <input type="text" name="FirstName" placeholder="Lauri" id="FirstName" maxlength="25" class="validateLocally" required />
    <span class="errors"></span>
</li>

jQuery (mm. case)

/* validoi kenttä */
function validateField( field ) {
    var errorText = "",
    error = false,
    value = field.val(),
    siblings = field.siblings( ".errors" );

    // tarkista mikä kenttä on lähetetty
    switch ( field.attr( "name" ) ) {

        case "FirstName":
            if ( !validateLength( value, 0 ) ) {
                error = true;
                errorText += "Etunimi on liian lyhyt!";
            }
            break;
    }

Jos joku haluaa olla nimeltään numero 1 niin olkoon sitten. Tärkeintä on että ylläpitäjä voisi tarkistaa käyttäjien rekisteröinnnit ja hyväksyä ne halutessaan.

The Alchemist [17.10.2013 11:40:20]

#

Sä olet taas kyhäämässä tuollaista bloattipaskafunktiota. Pilko asiat osakokonaisuuksiin ja tee niitä paljon kehuttuja pieniä ja yksinkertaisia funktioita.

Tässäpä mun pikainen räpellykseni validointiin: http://jsfiddle.net/wSmvb/1/

Disclaimer: Tuossa ei ole tavoiteltu vähäisimmässäkään määrin selainyhteensopivuutta eikä integraatiota natiivin html5-validoinnin kanssa.

late [17.10.2013 11:56:38]

#

Harjoittelen vasta JavaScriptiä ja jQuerya. Eli tällä hetkellä yritän saada validoinnin vain toimimaan. Mutta olet oikeassa tulevaisuudessa jokainen erilainen tarkistus voisi olla oma funktionsa, kaiketi?

groovyb [18.10.2013 01:30:04]

#

Sähköpostiosoitteen validointi on muutenkin vähän kyseenalaista. mikä estää käyttäjää fabrikoimasta sähköpostiosoitetta, tai kirjoittamaan jonkun muun osoitetta?

imho, ainut varma tapa varmistaa henkilön sähköposti, on lähettää confirmation viesti kirjoitettuun osoitteeseen, oli se sitten validi e-mail tai ei.

The Alchemist [18.10.2013 08:01:09]

#

Syötteiden tarkistaminen ei ole vain hyökkäysten ja bottien seulomista vaan myös osa käytettävyyttä. Rekisteröintivaiheessa olisi aika perseestä, jos käyttäjä olisikin syöttänyt sähköpostiosoitteekseen maikki.mehilainen@gmail.

groovyb [18.10.2013 10:50:09]

#

ylläolevan viestini tarkoitus oli, että pelkällä validoinnilla rekisteröintivaiheessa ei voida taata sitä, että sähköposti itsessään on validi ks. henkilölle, vaikka osoite teknisesti olisikin oikein.

The Alchemist [18.10.2013 10:53:24]

#

Millä tavoin varmistusviestin lähettäminen ei ole validointia?

groovyb [18.10.2013 11:07:04]

#

Kyse taisi olla tekstikentän validoinnista (regexillä harvoin maileja lähetellään) tässä postauksessa. Validointi käsitteenä toki kattaa kaikki varmistukset mitä sitten ikinä tehdäänkään, mutta veikkaisinpa että sinäkin osasit viestin oikeaan asiayhteyteen asettaa.

The Alchemist [18.10.2013 11:22:23]

#

Samaa validointia molemmat asiat silti ovat. Niiden käyttötarkoitus on eri osa-alueilla, eikä kumpikaan muutu turhaksi toisen takia.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta