Οι κανονικές εκφράσεις στην php χρησιμοποιούνται έτσι ώστε να αναγνωριστούν συγκεκριμένα «μοτίβα» αλφαριθμητικών μέσα από άλλα αλφαριθμητικά , επιβεβαιώνοντας έτσι την ύπαρξη των πρώτων στα δεύτερα. Θα μπορούσαμε δηλαδή να αναγνωρίσουμε αν μέσα σε ένα κείμενο είναι γραμμένη μια διεύθυνση email, ένα τηλέφωνο ή οτιδήποτε άλλο του υποδείξουμε εμείς.  Σε αυτή την ενότητα θα δούμε αναλυτικά πως αυτό 

Συνάρτηση preg_match

Στην preg_match πάντοτε χρησιμοποιείται ένα μοτίβο (pattern) το οποίο περιέχει σύμβολα μαζί με ειδικούς χαρακτήρες οι οποίοι αποτελούν και τους «κανόνες» του ζητούμενου αλφαριθμητικού. Το μοτίβο ξεκινά πάντα με «/» και τελειώνει με «/».

Παράδειγμα Επεξήγηση
^www
Συμβολίζει ένα string που ξεκινά σε «www»
com$
Συμβολίζει ένα string που τελειώνει σε «com»
w.rld
Έναν οποιοδήποτε χαρακτήρα ανάμεσα στο «w» και το «rld».
earth|world
Θα πρέπει να περιλαμβάνει «earth» ή «world».
a*bc
Συμβολίζει πως το a θα μπορεί να εμφανίζεται απο 0 έως άπειρες φορές. Πχ, bc, aabc, aaabc κ.α.
[a-z]+
Συμβολίζει πως θα εμφανιστεί ένας χαρακτήρας απο όλους τους χαρακτήρες ενδιάμεσα απο τα a-z απο 1 έως άπειρες φορές δηλαδή ειναι υποχρεωτικό το να εμφανιστεί ένας τουλάχιστον. (Εξού και το +)
world?
Να υπάρχει ένα ή κανένα «d» μετά το «worl».
world{1}
Να υπάρχει ένα υποχρεωτικά «d» μετά το «worl».
world{1,}
Να υπάρχει ένα, ή περισσότερα υποχρεωτικά «d» μετά το «worl».
world{2,3}
Να υπάρχουν δυο ή τρία «d» μετά το «worl».
^,{5}$
Ένα string με ακριβώς πέντε χαρακτήρες.
[a-z]
Έναν μικρό χαρακτήρα απο «a» έως «z».
[abc]
Έναν απο τους χαρακτήρες «a»,«b»,«c».
[a-zA-Z]
Έναν κεφαλαίο ή μικρό χαρακτήρα απο το «a» έως το «z».
[^wW]
Να μην εμπεριέχεται το «w» ή το «W».
world/i
Αναζήτηση με διάκριση στους πεζούς-κεφαλαίους χαρακτήρες.
\.
Ένας ειδικός χαρακτήρας να φαίνεται ακριβώς όπως είναι, στην συγκεκριμένη περίπτωση η τελεία.

Ας υποθέσουμε πως θέλουμε να «ελέγξουμε» αν ένας χρήστης έχει εισάγει σωστά τα στοιχεία του σε μια φόρμα εγγραφής η οποία περιλαμβάνει μόνο το e-mail του.

<html>
 <head>
  <title>Έλεγχος Ορθότητας E-mail</title>
 </head>
 <body>
  <?php
   if(isset($_POST['email'])){
    $email = $_POST['email'];
    
    $pattern='/^[a-zA-Z][a-zA-Z0-9-._]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/';
    
    if(!preg_match($pattern, $email)){
     echo "<strong>$email δεν είναι έγκυρο.</strong>";
    } else {
     echo "<strong>$email είναι έγκυρο.</strong>";
    }
   }else{?>
    <form action='email_val.php' method='post'>
     <input type='text' size='50' name='email' />
     <br/>
     <input type='submit' value='Έλεγχος'/>
    </form>
   <?php } ?>
 </body>
</html>

Ξέρουμε ότι μια διεύθυνση e-mail:

  • Ξεκινά με ένα γράμμα πεζό ή κεφαλαίο
    /^[a-zA-Z]
  • Μετά το πρώτο γράμμα μπορεί να περιέχει οποιοδήποτε λατινικό χαρακτήρα πεζό ή κεφαλαίο, αριθμούς , είτε την «τελεία», «παύλα», «κάτω παύλα». Αυτό θα μπορεί να επαναλαμβάνεται από 1 έως όσες φορές θέλουμε.
    [a-zA-Z0-9-._]+
  • Ύστερα ο υποχρεωτικός χαρακτήρας «@»
  • Μετά το «@» θα πρέπει να υπάρχει το όνομα του πάροχου υπηρεσίας email όπου μπορεί να είναι με πεζά η κεφαλαία γράμματα, αριθμούς και την παύλα. Τα παρακάτω θα πρέπει να υπάρχουν από μια φορά και παραπάνω.
    [a-zA-Z0-9-]+
  • Ύστερα ακολουθεί μια υποχρεωτική «τελεία».
    \.
  • Ορίζουμε το top-level domain του παρόχου που μπορεί να είναι από 2 έως 5 χαρακτήρες.
    [a-zA-Z.]{2,5}
  • Και τέλος γράφουμε τον χαρακτήρα τέλους του μοτίβου «$».

Συνάρτηση ereg_replace.php

 Παίρνει τρείς εισόδους αλφαριθμητικών, πρώτα αυτό που θέλουμε να αντικαταστήσουμε, δεύτερο ότι θέλουμε όταν αντικατασταθεί να υπάρχει, και τρίτο το αλφαριθμητικό στο οποίο θέλουμε να συμβούν όλα αυτά. Το αποτέλεσμα είναι επιστρεφόμενο και δεν επιδρά σε κανένα όρισμα.

<html>
 <head>
 </head>
 <body>
  <?php
   if(isset($_POST['str']) && isset($_POST['repl']) && isset($_POST['with'])){
    echo ereg_replace($_POST['repl'],$_POST['with'],$_POST['str']);
   } else {?>
    <form action='ereg_replace.php' method='post'>
     Το κείμενο:<input type='text' name='str'/><br/>
     Τι θέλουμε να αντικατασταθεί:<input type='text' name='repl'/> <br/>
     Με τι:<input type='text' name='with'/><br/>
     <input type='submit' value='Αποστολή'/>
    </form>
  <?php } ?>
 </body>
</html>

Συνάρτηση ereg()

Η συνάρτηση αυτή συγκρίνει δυο αλφαριθμητικά και πιο συγκεκριμένα το δεύτερο σύμφωνα με το πρώτο και επιστρέφει 1 αν είναι ίδια ή false σε διαφορετική περίπτωση.

<html>
 <head>
 </head>
 <body>
  <?php
   if(isset($_POST['text1']) && isset($_POST['text2'])){
    echo ereg($_POST['text2'],$_POST['text1']);
   } else {?>
    <form action='ereg.php' method='post'>
     Πρώτη λέξη:<input type='text' name='text1'/><br/>
     Δεύτερη λέξη:<input type='text' name='text2'/> <br/>
     <input type='submit' value='Αποστολή'/>
    </form>
  <?php } ?>
 </body>
</html>