treehouse : what would you like to learn today?
Web Design Web Development iOS Development

[Solved] Where am i going wrong? Simple Function ?!

  • Disclaimer: I know Javascript, but i dont know JQuery.

    All i am doing is testing if the input's value is an email. If true than allow, if false than alert.
    /* I normally wouldnt use an array but im doing stuff like this to practice and teach myself the syntax */
    var _inputArray = $([ "#name", "#email", "#subject", "#message" ]);
    var _regexEmail = /^([0-9a-zA-Z]([\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
    var _validate = function ($e)
    {
    $e.preventDefault();
    alert(_inputArray[1]);

    if ($("_inputArray[1]:text").val().match( _regexEmail )) //condition of == true?
    {
    alert("Submit");
    return;
    }
    else
    {
    alert("fail");
    }

    alert("It must be the if statement condition logic!?");
    };


    $(document).ready(function()
    {
    alert(_inputArray[1]);
    $('#button').click(_validate);

    });

    The html::

    <form>
    <input type="text" id="email">
    <input type="submit" value="test" id="button">
    </form>

    It's very frustrating for me learning new syntax because this took me a few hours to put together :( I would really value any input from yall.
  • /* This if statement is returning the false alert only but slightly fixed, still need alot of help with this */
    if ($( _inputArray[1] ).val().match( _regexEmail ))
    {
    alert("Your amount contains valid characters");
    return;
    }
  • Making more progress, i think i figured it out. Is this good practice?
    /* Updated, still needs work. Im still learning */
    var _inputArray = $([ "#name", "#email", "#subject", "#message" ]);
    var _regexEmail = /^([0-9a-zA-Z]([\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
    var _validate = function ($e)
    {
    $e.preventDefault();

    if ($( _inputArray[1] ).val().match( _regexEmail )) return $(document.body).append("It is True");
    else return $(document.body).append("It is False");

    };


    $(document).ready(function()
    {
    $('#button').click(_validate);
    });


    Any suggestions?
  • Not to stray too far from your actual question, but this
    ^([0-9a-zA-Z]([\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$

    will reject valid email addresses, including several of mine. Specifically, characters like * and + are valid in an email address. Also, this regex will accept things like email@.com as a valid address, when it's not. And that's not considering things like local addresses (admittedly, probably not something you need to worry about) that don't have a TLD.

    The best advice I've found on this issue is as follows:
    Don't go overboard in trying to eliminate invalid email addresses ... you don't really know whether an address is valid until you try to send an email to it.
    http://www.regular-expressions.info/email.html


    This regex is touted as fully-RFC822 compliant, but is largely impractical for obvious reasons.

    I usually hold off on email validation (just checking that the field is not empty, and/or allowing HTML5-capable browsers to check it) until server-side, where a better check can be made (e.g., using PHP's filter_var()).
  • @traq, Thanks for catching that. Normally whenever i use regex i go into my Visual Studio and grab one (ive become lazy). And yeah, i hear what your saying in regards to not trying to go over the top. I know that if people want me to contact them they will enter their appropriate email, nor am i trying to prevent from spammers (because the form im making will only be given to a few people, nothing crazy).

    Thanks for the resources and the heads up.

    Going with this simple regex
    \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*