.length is always 1

Discussion in 'Javascript' started by maxwells@gmail.com, Jul 30, 2008.

  1. Guest

    Dear Friends,

    The following is part of my form validation script. It checks that the
    user name entered is in Wiki name format.

    function checkup(theform){
    var form = document.forms[theform];
    var okay = true;
    var wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/);
    if (wikiName.length<3) {
    alert(form.name.value + ' is not a WikiName - please use one word
    with at least two capital letters');
    okay = false;
    }
    return okay;
    }

    Normally, if the wikiName returns a match of more than three letters
    then a successful match has been returned, so the name is in Wiki
    format.

    The thing is, even I do enter a valid Wiki name, such as "WikiName",
    it is refused. So I put in a couple of debugging alert statements
    before the if {} clause, to see what was going on:

    alert (wikiName);
    alert (wikiName.length);

    The result was:

    WikiN
    1

    How can this be? The string is correctly matched, and has 5
    characters. So why would its length be reported as 1?

    I tried this on Firefox and Explorer, same result both times.

    Can anybody solve this mystery?

    Thanks for your time,

    Dalgetty
     
    , Jul 30, 2008
    #1
    1. Advertising

  2. Jorge Guest

    On Jul 30, 3:44 pm, wrote:
    > Dear Friends,
    >
    > The following is part of my form validation script. It checks that the
    > user name entered is in Wiki name format.
    >
    > function checkup(theform){
    >         var form = document.forms[theform];
    >         var okay = true;
    >         var wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/);
    >         if (wikiName.length<3) {
    >                 alert(form.name.value + ' is not a WikiName - please use one word
    > with at least two capital letters');
    >                 okay = false;
    >         }
    >         return okay;
    >
    > }
    >
    > Normally, if the wikiName returns a match of more than three letters
    > then a successful match has been returned, so the name is in Wiki
    > format.
    >
    > The thing is, even I do enter a valid Wiki name, such as "WikiName",
    > it is refused. So I put in a couple of debugging alert statements
    > before the if {} clause, to see what was going on:
    >
    >         alert (wikiName);
    >         alert (wikiName.length);
    >
    > The result was:
    >
    >         WikiN
    >         1
    >
    > How can this be? The string is correctly matched, and has 5
    > characters. So why would its length be reported as 1?
    >
    > I tried this on Firefox and Explorer, same result both times.
    >
    > Can anybody solve this mystery?
    >


    alert(typeof wikiName) -> "object"

    Try:

    var wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-
    Z]/).toString();

    or

    var wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/) + "";

    --Jorge.
     
    Jorge, Jul 30, 2008
    #2
    1. Advertising

  3. GArlington Guest

    On Jul 30, 2:44 pm, wrote:
    > Dear Friends,
    >
    > The following is part of my form validation script. It checks that the
    > user name entered is in Wiki name format.
    >
    > function checkup(theform){
    > var form = document.forms[theform];
    > var okay = true;
    > var wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/);
    > if (wikiName.length<3) {
    > alert(form.name.value + ' is not a WikiName - please use one word
    > with at least two capital letters');
    > okay = false;
    > }
    > return okay;
    >
    > }
    >
    > Normally, if the wikiName returns a match of more than three letters
    > then a successful match has been returned, so the name is in Wiki
    > format.
    >
    > The thing is, even I do enter a valid Wiki name, such as "WikiName",
    > it is refused. So I put in a couple of debugging alert statements
    > before the if {} clause, to see what was going on:
    >
    > alert (wikiName);
    > alert (wikiName.length);
    >
    > The result was:
    >
    > WikiN
    > 1

    This is because value.match(reGexp) returns match(es if used with /g
    flag) in array form, so your wikiName.length returns the size of the
    returned array = 1.
    >
    > How can this be? The string is correctly matched, and has 5
    > characters. So why would its length be reported as 1?
    >
    > I tried this on Firefox and Explorer, same result both times.
    >
    > Can anybody solve this mystery?
    >
    > Thanks for your time,
    >
    > Dalgetty
     
    GArlington, Jul 30, 2008
    #3
  4. Guest

    Thanks friends, that did it!

    I should have realised that match would return an array, but I never
    would have guessed that alert() would try to print out an array by
    outputting 1!

    It works, thanks again

    Dalgetty
     
    , Jul 31, 2008
    #4
  5. Guest

    For the record - the working JavaScript validator for WikiName format:

    function checkup(theform){
    var form = document.forms[theform];
    var okay = true;
    if (form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/)) {
    wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-
    Z]/).toString();
    if (wikiName.length<3) {
    alert(form.name.value + ' is not a WikiName - please use one word
    with at least two capital letters');
    okay = false;
    }
    }
    }
     
    , Jul 31, 2008
    #5
  6. Jorge Guest

    On Jul 31, 3:15 pm, wrote:
    > For the record - the working JavaScript validator for WikiName format:
    >
    > function checkup(theform){
    >         var form = document.forms[theform];
    >         var okay = true;
    >         if (form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/)) {
    >             wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-
    > Z]/).toString();
    >                 if (wikiName.length<3) {
    >                         alert(form.name.value + 'is not a WikiName - please use one word
    > with at least two capital letters');
    >                         okay = false;
    >                 }
    >         }
    >
    >


    You could as well use (array)[0], as GArlington pointed out, instead
    of (array).toString().

    That's probably more correct :

    wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/)[0];

    --Jorge.
     
    Jorge, Jul 31, 2008
    #6
  7. In comp.lang.javascript message <bb872553-f0ee-4d12-a0ee-203925d5bd62@d7
    7g2000hsb.googlegroups.com>, Thu, 31 Jul 2008 06:35:59, Jorge
    <> posted:
    >That's probably more correct :
    >
    >wikiName = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/)[0];



    code: wikiName = "xx3d".match(/[A-Z][a-z0-9]*[0-9A-Z]/)[0];

    Firefox Error Console :
    Error: "xx3d".match(/[A-Z][a-z0-9]*[0-9A-Z]/) has no properties
    Source File: file:///C:/HOMEPAGE/js-quick.htm
    Line: 286



    I suggest building on

    M = form.name.value.match(/[A-Z][a-z0-9]*[0-9A-Z]/)
    if (M) { wikiName = M[0] ; ... }

    But a complete, reliable solution requires a full authoritative
    definition of the wikiName format; and it behoves the OP to provide [a
    link to] that.

    It's a good idea to read the newsgroup c.l.j and its FAQ. See below.

    --
    (c) John Stockton, nr London UK. ?@merlyn.demon.co.uk IE7 FF2 Op9 Sf3
    news:comp.lang.javascript FAQ <URL:http://www.jibbering.com/faq/index.html>.
    <URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
    <URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
     
    Dr J R Stockton, Aug 1, 2008
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mitchua
    Replies:
    5
    Views:
    2,748
    Eric J. Roode
    Jul 17, 2003
  2. =?Utf-8?B?SG96aQ==?=
    Replies:
    1
    Views:
    6,966
    Ken Cox [Microsoft MVP]
    Jun 2, 2004
  3. Sam
    Replies:
    3
    Views:
    14,110
    Karl Seguin
    Feb 17, 2005
  4. Deryck
    Replies:
    4
    Views:
    519
    derek giroulle
    Jun 22, 2004
  5. Borna N.
    Replies:
    2
    Views:
    358
    Brian Candler
    Mar 16, 2011
Loading...

Share This Page