.length is always 1

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • maxwells@gmail.com

    .length is always 1

    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.lengt h<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.lengt h);

    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
  • Jorge

    #2
    Re: .length is always 1

    On Jul 30, 3:44 pm, maxwe...@gmail. com 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.lengt h<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.lengt h);
    >
    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.

    Comment

    • GArlington

      #3
      Re: .length is always 1

      On Jul 30, 2:44 pm, maxwe...@gmail. com 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.lengt h<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.lengt h);
      >
      The result was:
      >
      WikiN
      1
      This is because value.match(reG exp) 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

      Comment

      • maxwells@gmail.com

        #4
        Re: .length is always 1

        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

        Comment

        • maxwells@gmail.com

          #5
          Re: .length is always 1

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

          function checkup(theform ){
          var form = document.forms[theform];
          var okay = true;
          if (form.name.valu e.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.lengt h<3) {
          alert(form.name .value + ' is not a WikiName - please use one word
          with at least two capital letters');
          okay = false;
          }
          }
          }

          Comment

          • Jorge

            #6
            Re: .length is always 1

            On Jul 31, 3:15 pm, maxwe...@gmail. com 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.valu e.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.lengt h<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).toStrin g().

            That's probably more correct :

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

            --Jorge.

            Comment

            • Dr J R Stockton

              #7
              Re: .length is always 1

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

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

              Firefox Error Console :
              Error: "xx3d".matc h(/[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.c om/faq/index.html>.
              <URL:http://www.merlyn.demo n.co.uk/js-index.htmjscr maths, dates, sources.
              <URL:http://www.merlyn.demo n.co.uk/TP/BP/Delphi/jscr/&c, FAQ items, links.

              Comment

              Working...