Προς το περιεχόμενο

javascript regular expressions


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

Χρειάζομαι να φτιάξω ένα regular expression για ταυτοποίηση αριθμού ταυτότητος σε javascript. δοκίμασα αυτό /^[A-Z]{2}\d{6}/ αλλά μου δουλεύει μόνο με αγγλικά γράμματα.Ξέρει κανείς κάτι σχετικό?

Ευχαριστώ

Δημοσ.

Απλώς θα γράψεις μέσα στο regex τους ελληνικούς χαρακτήρες που σε ενδιαφέρουν (και δε θα ήταν άσχημα να προβλέψεις και τι γίνεται όταν οι χαρακτήρες είναι όμοιοι οπτικά με τους λατινικούς, οπότε και ο χρήστης μπορεί να μη γυρίσει καν το πληκτρολόγιο στα ελληνικά).

 

Για παράδειγμα δώσε αυτό στην JS console του browser:

 

>/καλη/.test("καλημέρα")

  • 4 χρόνια αργότερα...
Δημοσ.

Καλησπέρα,

Χρειάζομαι να φτιάξω ένα regular expression για ταυτοποίηση αριθμού ταυτότητος σε javascript. δοκίμασα αυτό /^[A-Z]{2}\d{6}/ αλλά μου δουλεύει μόνο με αγγλικά γράμματα.Ξέρει κανείς κάτι σχετικό?

Ευχαριστώ

 

καλησπέρα, φίλε μου μια ερώτηση, πως πέρασες ελληνικούς χαρακτήρες, στα Regular Exp στην JS; 

Δημοσ. (επεξεργασμένο)

Οι κεφαλαίοι Ελληνικόι χαρακτήρες βρίσκονται στο block:

[\u0391-\u03a9]

εάν θέλεις να συμπεριλάβεις και τα μικρά, τότε πάς στο:

[\u0391-\u03c9]

Αναλυτικότερα, οι χαρακτήρες είναι εδώ.

Επεξ/σία από sundance_kid
Δημοσ.

 

Χρειάζεται κάτι πιο πολύπλοκο από αυτό?


/^[Α-Ω]{2}\d{6}/

 

Ναί, γιατί οι παλαιές ταυτότητες έχουν την ακολουθία: 1 γραμμα - 1 κενό - 6 ψηφία. Η regex σου δεν την καλύπτει.

 

Επίσης, κάκιστη τακτική η χρήση non-standard ASCII χαρακτήρων σε οποιοδήποτε σημείο κώδικα.

Δημοσ.

Ναί, γιατί οι παλαιές ταυτότητες έχουν την ακολουθία: 1 γραμμα - 1 κενό - 6 ψηφία. Η regex σου δεν την καλύπτει.

 

Επίσης, κάκιστη τακτική η χρήση non-standard ASCII χαρακτήρων σε οποιοδήποτε σημείο κώδικα.

 

Για το πρώτο κομμάτι που δεν ήταν στο αρχικό ζητούμενο προφανώς λύνεται με ένα με ένα απλό space μετά το Ω όμως πιθανότατα το κενό δεν θα το περάσει κάποιος στο πεδίο και θα πρέπει να δεχτείς ακόμα και την περίπτωση 1 γράμμα - 6 ψηφία.

 

Αν θες εξήγησε λίγο γιατί κάκιστη πρακτική / τι πιθανό πρόβλημα μπορεί να προκύψει σε αυτή την περίπτωση?

Δημοσ.

Αν θες εξήγησε λίγο γιατί κάκιστη πρακτική / τι πιθανό πρόβλημα μπορεί να προκύψει σε αυτή την περίπτωση?

 

Γιατί δεν μπορείς να ξέρεις τι source charset χρησιμοποιείται κάθε φορά.

Δημοσ.

[Α-Ω]{1,2} Αυτό πιάνει 1-2 κεφαλαία γράμματα

κενό ? κάνει το κενό προεραιτικό

\d{6} παίρνει 6 αριθμούς για μεγαλύτερη ακρίβεια μπορείς να το κάνεις [0-9]{6} και ένα δολάριο στο τέλος

όλο μαζί  

^[Α-Ω]{1,2} ?[0-9]{6}$ 

Δημοσ.

Γιατί δεν μπορείς να ξέρεις τι source charset χρησιμοποιείται κάθε φορά.

 

Τι ενοείς δεν μπορείς να ξέρεις? αν δηλώνεις utf-8 πχ στο script tag υπάρχει κάποια περίπτωση να μην αναγνωριστεί ο χαρακτήρας?

Δημοσ.

Οπότε το point σου είναι περί γενικής συνήθειας σε οποιαδήποτε γλώσσα και περιβάλλον; Μαζί σου, απλά φαντάστηκα ότι αναφερόσουν σε κάτι πιο σχετικό με το παράδειγμα που συζητάμε και δεν βρήκα κάτι που να υποδηλώνει κάτι τέτοιο.

Δημοσ.

Αν θες εξήγησε λίγο γιατί κάκιστη πρακτική / τι πιθανό πρόβλημα μπορεί να προκύψει σε αυτή την περίπτωση?

 

Βασικά το θέμα είναι ότι εκτός απλού λατινικού αλφαβήτου δεν είναι καθόλου προφανές τι σημαίνει [X-Y]. Ας πούμε το [Α-Ω] πόσα διαφορετικά code points μπορεί να κάνει match? 24, αλλά αυτό δε μπορείς να το ξέρεις χωρίς να ανατρέξεις στο πρότυπο Unicode. Το [ά-ώ] πόσα code points? 35 διαφορετικά (όλα αυτά προκύπτουν από εδώ).

 

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

 

That said δε θα έλεγα ότι απαγορεύεται δια ροπάλου, απλά αν το κάνεις και θα το δει κι άλλος φρόντισε να είναι κατανοητό τι ακριβώς συμβαίνει. Η σίγουρη μέθοδος είναι να βάλεις unicode escapes ("\uXXXX") οπότε είναι άμεσα φανερό το τι συμβαίνει σε τεχνικό επίπεδο.

 

 

Γιατί δεν μπορείς να ξέρεις τι source charset χρησιμοποιείται κάθε φορά.

 

Όταν είσαι σε Javascript context, τα πάντα είναι UTF-8 τελεία και παύλα. Δεν έχει σχέση με το πώς παρέλαβε τη σελίδα (σε τι encoding) ο browser.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...