Using JavaScript To Validate Form Input Values

While developing the new version of BonLook.com, I needed a way to validate user input values in the various forms of the site. I wanted to avoid using yet another jQuery library.

I came up with a simple function named validateUserInput taking 5 arguments:

  1. contentToValidate: the actual text that was entered by the user;

  2. validationType: the type of validation, I have three so far:

    1. different: user input is different from a specific string (mostly for fields left empty by the user);

    2. same: user input matches something specific (useful form password confirmation field);

    3. email: user input is a valid email address.

  3. validationRule: what user input will be compared against;

  4. elementToValidate: element that will receive the invalid message (if any);

  5. invalidMessage: the message that I want displayed near the validated field.

Here is the function:


function validateUserInput(contentToValidate, validationType, validationRule, elementToValidate, invalidMessage) {
    $(elementToValidate).prev('.error').remove();
    var userInputValid = false;
    if (validationType == "different") {
        if (contentToValidate !== validationRule) {
            userInputValid = true;
        }
    } else if (validationType == "same") {
        userInputValid = (contentToValidate == validationRule);
    }  else if (validationType == "email") {
        userInputValid = isValidEmailAddress(contentToValidate);
    }       
    if (userInputValid == true) {
        toggleValidityClass(true, elementToValidate);
        return true;
    } else {
        toggleValidityClass(false, elementToValidate);
        var errorElement = $('<div />', {
            class: 'error',
            html: invalidMessage
        });
        $(elementToValidate).before(errorElement);
        return false;
    }
}

And here is toggleValidityClass which adds/removes a red border to the validated form field using a CSS class:


function toggleValidityClass(isValid, identifier) {
    if (isValid) {
        $(identifier).removeClass('invalid');
    }
    else {
        $(identifier).addClass('invalid');
    }
}

Upon form submission, you could validate the password and confirmpassword inputs like this:


if (
    validateUserInput($('#my-form').find('[name=password]').val(), "different", "", $('#my-form').find('[name=password]'), "You must provide a password") &
    validateUserInput($('#my-form').find('[name=confirmpassword]').val(), "same", $('#my-form').find('[name=password]').val(), $('#my-form').find('[name=confirmpassword]'), "Password must match")
   ) {
    // inputs valid, proceed
}

The Mac, still an expensive option

For about a year, I have been using the iPad as my personal computer. I used many hacks to convince me that I was as productive with it as I would be using a traditional computer. Looking back to that year, I haven’t done much. None of my personal projects moved forward in any way.

I then decided to buy a laptop. The iPad did spoil me, I wanted portability and battery life. I had some money so I bought an 11 inches MacBook Air. It was my first Mac and I was realizing a dream. I was a bit disappointed by the battery life but having a real computer that I could tweak was fantastic.

Then… my car broke, and broke once more. The repairs were expensive and I couldn’t justify the amount of money I had just put into the Air… I had to return it.

I still needed a computer. I stumbled upon a deal on NCIX, a Lenovo X130e. Same screen size and resolution as the Air, basically the same dimensions but much thicker. It was heavier than the Air and it didn’t have OS X but it did have a few important advantages:

  • The Lenovo keyboard is the best laptop keyboard I have tried;
  • 10h of battery life;
  • The price: 379$, a third of the Macbook Air’s.

They processor and the storage are much slower in this tiny Lenovo, it uses old technology such as a 7200 rpm hard drive. With some time and an additional 150$, I could find 8GB of RAM and a 128 GB SSD that fitted in this little guy. Now, for less than 550$, I have an ultra portable laptop that is the fastest computer I have ever owned. I do miss OS X, but most of my time is spent in a text editor and on the web. With Sublime Text and Google Chrome, I am all set. I still have the iPad and it shines even more now that I use it the way it was meant to be used.

There’s a ton of crappy Windows laptops out there. With some research, it’s possible to find a good laptop that will significantly be less expensive than a MacBook. I still believe that Apple computers are not too expensive, the built quality is exceptional. For example, the Lenovo is in plastic and makes more noise. Those are simply not features that I can pay for right now and it does not affect me the way I thought it would have. Durability, portability, battery life and performance are the features I really need. I get all of that with the X130e.

Le Système, deuxième partie; les fondements d’un nouveau système politique

Dans Le Système, première partie, je présentais rapidement ce qui explique pourquoi notre système politique est déficient. Je suis loin d’être un expert en politique ou en démocratie. Je suis certainement un peu naïf. Tout de même, voici le fruit de ma réflexion.

La démocratie directe

Nous sommes en 2012, la technologie n’a jamais été aussi présente dans nos vies. Nous venons d’envoyer un robot gros comme une voiture qui s’est posé tout doucement sur Mars. Si on s’y met à plusieurs, nous trouverons une façon de consulter toute la population pouvant voter facilement et rapidement.

Dans ce nouveau système, ce sont les gens qui décident de l’acceptation d’une loi, et non le parti majoritaire au pouvoir. Pourquoi ne pas instaurer une journée par mois pendant laquelle les gens pourraient s’exprimer rapidement sur différentes lois proposées et présentées par un groupe de ministres supervisé par un président?

L’exécutif

C’est bien de voter mais encore faut-il voter sur quelque chose. J’ai déjà écrit que les députés ne servaient à rien ou presque.

Dans ce nouveau système, on ne vote pas pour notre député, mais plutôt pour plusieurs individus : les ministres et le président.

Le jour du vote, on devrait choisir un ministre de la santé, de l’éducation, des finances, et ainsi de suite. Il faudrait aussi se choisir un président.

Les ministres

Un médecin pourrait se présenter pour le poste de ministre de la santé. Il serait alors opposé à d’autres individus qui veulent également ce poste. Il y aurait un débat des candidats pour le ministère de la santé.

Ainsi, différents individus ayant différentes valeurs seraient élus dans leur domaine de compétence. Chacun serait choisi par l’entièreté de la population, de manière proportionnelle.

Ce groupe d’individus travaillerait ensuite pour prendre des décisions afin de faire avancer le Québec. Ces ministres voteraient entre eux sur des propositions et lorsqu’un projet aurait l’appui de la majorité d’entre eux, un vote serait soumis à toute la population du Québec.

Le président

À l’image des ministres, un président serait également élu par toute la population. Cet individu serait choisi en fonction de sa vision globale du Québec. Tout comme pour les ministres, il y aurait un ou plusieurs débats des candidats à la présidence.

Le président aurait un rôle important procuré par sa grande légitimité. Il pourrait utiliser un droit de veto lorsqu’il considèrerait qu’une proposition acceptée par l’exécutif de façon majoritaire serait négative pour le Québec.

C’est farfelu, ça ne fonctionnera jamais

Au moment d’écrire ce texte, je n’avais pas vraiment fait de recherche pour savoir si un tel système existait quelque part. Quelques personnes à qui j’ai expliqué rapidement ce que j’avais imaginé m’ont dit que tout ça ne tenait pas la route :

  • Comment choisir ces gens?
  • Rien n’avancera… (Comme si on avançait en ce moment !)
  • Comment gérer les projets en régions ? (J’y reviendrai.)

Aujourd’hui, j’ai appris ceci :

(En 2009, suite à la crise) 1 000 citoyens islandais ayant entre 18 à 89 ans et n’ayant jamais eu de mandat d’élu national ont été choisis au hasard dans la population. Parmi ces 1 000 personnes, 522 ont choisi de se présenter et ont eu un temps de télévision égal pour présenter leur programme. 25 de ces citoyens ont été ensuite élus par l’ensemble de la population pour créer une nouvelle constituante entre février 2011 et l’été de la même année.