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

JavaScript - Regular Expressions&Length Validation


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

Δημοσ.

Καλησπέρα παιδιά, θα ήθελα να κάνω έλεγχο στην φόρμα μου, πριν την περάσω στην ΒΔ, με RegEx & Length Check. 

 

Έχω γράψει τον εξής κώδικα, και λειτουργεί σωστά, απλά δεν μπορώ να περάσω τα RegEx. 

function validateForm() {
for (var i = 0; i < document.forms[0].elements.length; i++) {
    var pedio = document.forms[0].elements[i];
	if(pedio.id.indexOf("Name")!=-1){
		if (pedio.value.length < 5 || pedio.value.length > 35) {
			alert("Full Name must be 5-35 character long");
                        pedio.focus();
                        pedio.style.backgroundColor = "#997379";
                        return false;
		}
	}
	
    if ((pedio.id.indexOf("Phone") != -1) && (isNaN(pedio.value))) {
        alert("Phone is must contain only numbers");
        pedio.focus();
        pedio.style.backgroundColor = "#997379";
        return false;
    }
	
	if(pedio.id.indexOf("Phone")!=-1){
		if (pedio.value.length!=10) {
			alert("Phone must be 10 numbers");
            pedio.focus();
            pedio.style.backgroundColor = "#997379";
            return false;
			}
		}
	}
}

Όσα αφορά τα RegEx, τα έχω βρει και είναι τα εξής,

για το όνομα: var regex = /^[a-zA-Z ]$/;

για το τηλέφωνο var regexPhone= /^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/;

Δημοσ.

Γιατί κάνεις τέτοιες καστομιές το 2017.....................................  :wacko:

 

Για το regex τι να πω, ότι λογικό είναι αφού χρησιμοποιείς πράγματα που δεν ξέρεις όπως φαίνεται πώς δουλεύουν; Για το name ας πούμε είναι φανερό πως μόνο αν βάλεις ένα χαρακτήρα μόνο του θα περάσει.

 

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

Δημοσ.

Γιατί κάνεις τέτοιες καστομιές το 2017.....................................  :wacko:

 

Για το regex τι να πω, ότι λογικό είναι αφού χρησιμοποιείς πράγματα που δεν ξέρεις όπως φαίνεται πώς δουλεύουν; Για το name ας πούμε είναι φανερό πως μόνο αν βάλεις ένα χαρακτήρα μόνο του θα περάσει.

 

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

 

Καστομίες; 

Απλός κώδικας είναι, λειτουργικός - λειτουργικός...

Το όνομα λειτουργεί με την συνθήκη σωστά..

 

Είναι ελεγμένος ο κώδικας πριν δημοσιευτεί φίλε μου..

 

Δεν μπορώ να προσθέσω τα Regular Expression ώστε να φιλτράρει τα inputs..

Δημοσ.

1. Καστομιές 200%

 

2. Ο κώδικας είναι λειτουργικός αλλά άθλιος

 

3. Τι δεν μπορείς να προσθέσεις; if(!regex.test(pedio.value)) { ... }

Δημοσ.

Αυτή ακριβώς είναι η νοοτροπία με την οποία ο κώδικας θα είναι εξίσου άθλιος και σ' ένα χρόνο. Anyway, ελπίζω να βοήθησα λίγο, καλή συνέχεια.

Δημοσ.

Αυτή ακριβώς είναι η νοοτροπία με την οποία ο κώδικας θα είναι εξίσου άθλιος και σ' ένα χρόνο. Anyway, ελπίζω να βοήθησα λίγο, καλή συνέχεια.

Μα φίλε μου, μην με απογοητεύεις και μετά την κάνεις.. 

Δώσε μου σε παρακαλώ 2-3 παραδείγματα γιατί θα είναι άχρηστος ο κώδικας και εγώ θα τον διορθώσω..

Δημοσ.

Αμα το ονομα ειναι στα Ελληνικα τι γινεται; ή να περιεχει τελος παντων μη λατινικους χαρακτηρες; Αμα μπει ενας σουηδος να γραψει το ονομα του;

 

Μπορεις να χρησιμοποιησεις και pattern μεσα στην html για να αποσυμφορησεις λιγο το script

  • Like 1
Δημοσ.

Μα φίλε μου, μην με απογοητεύεις και μετά την κάνεις.. 

Δώσε μου σε παρακαλώ 2-3 παραδείγματα γιατί θα είναι άχρηστος ο κώδικας και εγώ θα τον διορθώσω..

 

Ξέρεις κάτι, αυτό σημαίνει ότι θα προσφέρω δωρεάν το χρόνο μου και τις γνώσεις μου. Πράγμα που απλά δε γουστάρω να κάνω όταν ξέρω ότι δε θα εκτιμηθεί. Αλλά επειδή το θεωρώ υποχρεωτικό να υπερασπίζεσαι μια κριτική άποψη που θεώρησες σημαντικό να διατυπώσεις, ορίστε μερικά random:

 

#1

pedio.style.backgroundColor => τελείως λάθος νοοτροπία, δώσε CSS class instead

 

#2

alert()

focus()

backgroundColor

return false

 

Όλα αυτά επαναλαμβάνονται συνέχεια, οπότε είναι προφανές ότι πρέπει να συγκεντρωθούν και να είναι κάπου γραμμένα μόνο μια φορά.

 

#3

if(pedio.id.indexOf("ΧΧΧ")!=-1)

 

Αυτό καταρχήν είναι προφανώς λάθος γιατί κάνει πολύ loose match με indexOf. Δε μπορώ να ξέρω τι είναι το σωστό, υπάρχει άνετα και η περίπτωση απλά να μη χρειάζεται. Διαφορετικά, υποθέτοντας πως τα ids είναι του στυλ X.Y ή Χ_Υ το σωστό θα ήταν να σπάζονται. Εν πάσει περιπτώσει, θέλεις στο τέλος να μπορείς να κάνεις comparison αποκλειστικά με === γιατί αυτό θα επιτρέψει περαιτέρω βελτιώσεις.

 

#4

Και μιας που είμαστε εδώ, γιατί κοιτάει id και όχι name? Semantically αυτό είναι το σωστό. Τώρα είσαι υποχρεωμένος να έχεις παντού id και παντού να είναι ίδιο με το name => παραβίαση του DRY και πάλι.

 

#5

Αφού διορθωθούν αυτά, το επόμενο βήμα είναι να κάνεις specify τους validators π.χ. σε ένα object, κάπως σαν

 

var validators = {

    "Name": [

        new StringLengthValidator(5, 35),

        new RegexValidator(.....)

    ], // κλπ

};

 

και μετά ένα χαζό και DRY loop το οποίο δε θα χρειαστεί να ξαναπειράξεις ποτέ τα κάνει όλα.

 

Καλή συνέχεια, μη ξεχάσεις να τον διορθώσεις ε;  :-D

  • Like 1
Δημοσ.

Αυτά δεν τα κάνω για χρήματα.

 

Όπως και ένα φιλί βέβαια, δε σημαίνει πως επειδή είναι τζάμπα όποιος θέλει παίρνει.

Δημοσ.

και πόσα χρήματα ήθελες δηλαδή για αυτά? ζήτημα να έκανες 10 λεπτά να τα γράψεις..

Δεν πληρώνεις την ώρα που του πήρε να τα γράψει. Πληρώνεις την ώρα που του πήρε να τα μάθει για να στα γράψει σε 10 λεπτά.

  • Like 1
Δημοσ.

να τον πληρώσουμε που έμαθε html, css και javascript των 10 λεπτών?

 

για form validation???

 

θα μας τρελάνετε???

 

περίμενε λίγο να συνέλθω.. 

 

και ξαναρωτάω..

 

είστε σοβαροί?????????? 

Δημοσ.

Όσον αφορά το regex του τηλεφώνου

var regexPhone= /^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/;

 

Όταν έχεις μόνο ένα στοιχείο (την παρένθεση) δεν χρειάζεται να την κάνεις group δηλαδή [(] ή [)] αρκεί να την κάνεις escape \( ή \)

επίσης το {0,1} μπορείς να το αντικαταστήσεις με το σύμβολο του προαιρετικού ?

και το [0-9]μπορείς να το κάνεις \d 

όπως δεν έκανες escape στην παρένθεση μέσα στο group [(] έτσι δεν χρειάζεται να κάνεις escape και την τελεία [-\s.]

Δημοσ.

να τον πληρώσουμε που έμαθε html, css και javascript των 10 λεπτών?

 

για form validation???

 

θα μας τρελάνετε???

 

περίμενε λίγο να συνέλθω.. 

 

και ξαναρωτάω..

 

είστε σοβαροί?????????? 

Ο άνθρωπος δεν μίλησε για χρήματα... μίλησε για χρόνο ο οποίος δεν θα εκτιμηθεί και καλά είπε γιατί μπήκες εσύ εδώ μέσα (όχι αυτός που δημιούργησε το post) και το παίζεις ιστορία. Πλέον αυτό το section του insomnia φαίνεται να είναι για τα μπάζα. 

 

Όπως αυτός είπε ότι δεν είναι καλός ο κώδικας και το τεκμηρίωσε έτσι και εσύ θα μπορούσες να κάνεις το ίδιο για το αντίθετο. Για κάν' το να σε δούμε. 

  • Like 1

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

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

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

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

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

Σύνδεση

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

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