drumforhim Δημοσ. 16 Οκτωβρίου 2012 Δημοσ. 16 Οκτωβρίου 2012 Καλησπέρα, Χρειάζομαι να φτιάξω ένα regular expression για ταυτοποίηση αριθμού ταυτότητος σε javascript. δοκίμασα αυτό /^[A-Z]{2}\d{6}/ αλλά μου δουλεύει μόνο με αγγλικά γράμματα.Ξέρει κανείς κάτι σχετικό? Ευχαριστώ
defacer Δημοσ. 16 Οκτωβρίου 2012 Δημοσ. 16 Οκτωβρίου 2012 Απλώς θα γράψεις μέσα στο regex τους ελληνικούς χαρακτήρες που σε ενδιαφέρουν (και δε θα ήταν άσχημα να προβλέψεις και τι γίνεται όταν οι χαρακτήρες είναι όμοιοι οπτικά με τους λατινικούς, οπότε και ο χρήστης μπορεί να μη γυρίσει καν το πληκτρολόγιο στα ελληνικά). Για παράδειγμα δώσε αυτό στην JS console του browser: >/καλη/.test("καλημέρα")
hariC11 Δημοσ. 15 Ιουνίου 2017 Δημοσ. 15 Ιουνίου 2017 Καλησπέρα, Χρειάζομαι να φτιάξω ένα regular expression για ταυτοποίηση αριθμού ταυτότητος σε javascript. δοκίμασα αυτό /^[A-Z]{2}\d{6}/ αλλά μου δουλεύει μόνο με αγγλικά γράμματα.Ξέρει κανείς κάτι σχετικό? Ευχαριστώ καλησπέρα, φίλε μου μια ερώτηση, πως πέρασες ελληνικούς χαρακτήρες, στα Regular Exp στην JS;
sundance_kid Δημοσ. 15 Ιουνίου 2017 Δημοσ. 15 Ιουνίου 2017 (επεξεργασμένο) Οι κεφαλαίοι Ελληνικόι χαρακτήρες βρίσκονται στο block: [\u0391-\u03a9] εάν θέλεις να συμπεριλάβεις και τα μικρά, τότε πάς στο: [\u0391-\u03c9] Αναλυτικότερα, οι χαρακτήρες είναι εδώ. Επεξ/σία 15 Ιουνίου 2017 από sundance_kid
alou Δημοσ. 15 Ιουνίου 2017 Δημοσ. 15 Ιουνίου 2017 Χρειάζεται κάτι πιο πολύπλοκο από αυτό? /^[Α-Ω]{2}\d{6}/
sundance_kid Δημοσ. 15 Ιουνίου 2017 Δημοσ. 15 Ιουνίου 2017 Χρειάζεται κάτι πιο πολύπλοκο από αυτό? /^[Α-Ω]{2}\d{6}/ Ναί, γιατί οι παλαιές ταυτότητες έχουν την ακολουθία: 1 γραμμα - 1 κενό - 6 ψηφία. Η regex σου δεν την καλύπτει. Επίσης, κάκιστη τακτική η χρήση non-standard ASCII χαρακτήρων σε οποιοδήποτε σημείο κώδικα.
alou Δημοσ. 16 Ιουνίου 2017 Δημοσ. 16 Ιουνίου 2017 Ναί, γιατί οι παλαιές ταυτότητες έχουν την ακολουθία: 1 γραμμα - 1 κενό - 6 ψηφία. Η regex σου δεν την καλύπτει. Επίσης, κάκιστη τακτική η χρήση non-standard ASCII χαρακτήρων σε οποιοδήποτε σημείο κώδικα. Για το πρώτο κομμάτι που δεν ήταν στο αρχικό ζητούμενο προφανώς λύνεται με ένα με ένα απλό space μετά το Ω όμως πιθανότατα το κενό δεν θα το περάσει κάποιος στο πεδίο και θα πρέπει να δεχτείς ακόμα και την περίπτωση 1 γράμμα - 6 ψηφία. Αν θες εξήγησε λίγο γιατί κάκιστη πρακτική / τι πιθανό πρόβλημα μπορεί να προκύψει σε αυτή την περίπτωση?
sundance_kid Δημοσ. 16 Ιουνίου 2017 Δημοσ. 16 Ιουνίου 2017 Αν θες εξήγησε λίγο γιατί κάκιστη πρακτική / τι πιθανό πρόβλημα μπορεί να προκύψει σε αυτή την περίπτωση? Γιατί δεν μπορείς να ξέρεις τι source charset χρησιμοποιείται κάθε φορά.
k33theod Δημοσ. 16 Ιουνίου 2017 Δημοσ. 16 Ιουνίου 2017 [Α-Ω]{1,2} Αυτό πιάνει 1-2 κεφαλαία γράμματα κενό ? κάνει το κενό προεραιτικό \d{6} παίρνει 6 αριθμούς για μεγαλύτερη ακρίβεια μπορείς να το κάνεις [0-9]{6} και ένα δολάριο στο τέλος όλο μαζί ^[Α-Ω]{1,2} ?[0-9]{6}$
alou Δημοσ. 17 Ιουνίου 2017 Δημοσ. 17 Ιουνίου 2017 Γιατί δεν μπορείς να ξέρεις τι source charset χρησιμοποιείται κάθε φορά. Τι ενοείς δεν μπορείς να ξέρεις? αν δηλώνεις utf-8 πχ στο script tag υπάρχει κάποια περίπτωση να μην αναγνωριστεί ο χαρακτήρας?
alou Δημοσ. 19 Ιουνίου 2017 Δημοσ. 19 Ιουνίου 2017 Οπότε το point σου είναι περί γενικής συνήθειας σε οποιαδήποτε γλώσσα και περιβάλλον; Μαζί σου, απλά φαντάστηκα ότι αναφερόσουν σε κάτι πιο σχετικό με το παράδειγμα που συζητάμε και δεν βρήκα κάτι που να υποδηλώνει κάτι τέτοιο.
defacer Δημοσ. 19 Ιουνίου 2017 Δημοσ. 19 Ιουνίου 2017 Αν θες εξήγησε λίγο γιατί κάκιστη πρακτική / τι πιθανό πρόβλημα μπορεί να προκύψει σε αυτή την περίπτωση? Βασικά το θέμα είναι ότι εκτός απλού λατινικού αλφαβήτου δεν είναι καθόλου προφανές τι σημαίνει [X-Y]. Ας πούμε το [Α-Ω] πόσα διαφορετικά code points μπορεί να κάνει match? 24, αλλά αυτό δε μπορείς να το ξέρεις χωρίς να ανατρέξεις στο πρότυπο Unicode. Το [ά-ώ] πόσα code points? 35 διαφορετικά (όλα αυτά προκύπτουν από εδώ). Ένα άλλο θέμα είναι ότι πολλοί χαρακτήρες φαίνονται όμοιοι με άλλους, αλλά δεν είναι. Κάποιος που θα την πατήσει επειδή έκανες κάτι τέτοιο θα θέλει να σε σκοτώσει. That said δε θα έλεγα ότι απαγορεύεται δια ροπάλου, απλά αν το κάνεις και θα το δει κι άλλος φρόντισε να είναι κατανοητό τι ακριβώς συμβαίνει. Η σίγουρη μέθοδος είναι να βάλεις unicode escapes ("\uXXXX") οπότε είναι άμεσα φανερό το τι συμβαίνει σε τεχνικό επίπεδο. Γιατί δεν μπορείς να ξέρεις τι source charset χρησιμοποιείται κάθε φορά. Όταν είσαι σε Javascript context, τα πάντα είναι UTF-8 τελεία και παύλα. Δεν έχει σχέση με το πώς παρέλαβε τη σελίδα (σε τι encoding) ο browser. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα