Javascript code enhancement for site field validation

Asked

Viewed 49 times

-1

Good morning guys, I just need a little help improving a javascript field validation. In my form there is a field called website and I need to have a url validation (I already did) and I need to have a block of some words not allowed in this field. For example: Google, Facebook, etc.

My code is like this:

function validateForm() {
    var url = document.forms["registration"]["website"].value;

    var pattern =  /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/;

    var re =  /facebook|Facebook|Google|google|linkedin|youtube|semsite|não|nosite|naotem|naotenho|asd|kkk|qqq|fff|aaa|ccc|ppp|haha|hehe/;

    var result = url.match(re);
    if (result == "facebook") {
        alert("Essa palavra não é permitida no campo site");
        event.preventDefault();
        return false;
    }
    if (result == "Facebook") {
        alert("Essa palavra não é permitida no campo site");
        event.preventDefault();
        return false;
    }
    if (result == "google") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "Google") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "linkedin") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "linkedin") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "youtube") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "semsite") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "não") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "nosite") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "naotem") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "naotenho") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "asd") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "kkk") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "qqq") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "fff") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "aaa") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "ccc") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "ppp") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "haha") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }
    if (result == "hehe") {
        alert("Essa palavra não é permitida no campo site");
        return false;
    }

    if (pattern.test(url)) {
        return true;
    } else {
        alert("A URL não é valida");
        return false;
    }
}

But note that this is not such a correct practice to do, because every time I need to add a new word I will need to create another validation there. Someone would have a suggestion to help improve it?

Thank you.

  • all messages are the same, why use so many if? could not use a single if as if(result != undefined && result != '')?

  • This is my idea, take these both of if and seek a simple solution so that whenever you need to put a new word do not need to put more if you understand. I’ll try it the way you said. @Ricardopunctual

  • @Ricardopunctual the way you passed doesn’t work. It’s not blocking the word I need.

  • can test by changing the if to if(result != null)?

2 answers

1

I suggest you use the index function to check all these words.

var forbidden = ['banana', 'maca', 'pera'];

var result = 'banana';

document.write(forbidden.indexOf(result)>-1?'Essa palavra não é permitida no campo site':'Not big deal');

0

In this line of code: var result = url.match(re); the result variable will only be populated if it finds corresponding values in the url variable, so my test would be:

var result = url.match(re);
if (result != null) {
    alert("Essa palavra não é permitida no campo site");
    event.preventDefault();
    return false;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.