Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Javascript (http://www.velocityreviews.com/forums/f68-javascript.html)
-   -   .length is always 1 (http://www.velocityreviews.com/forums/t936657-length-is-always-1-a.html)

maxwells@gmail.com 07-30-2008 01:44 PM

.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.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

Jorge 07-30-2008 02:53 PM

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.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.

GArlington 07-30-2008 02:54 PM

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.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



maxwells@gmail.com 07-31-2008 12:45 PM

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

maxwells@gmail.com 07-31-2008 01:15 PM

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.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;
}
}
}

Jorge 07-31-2008 01:35 PM

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.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.

Dr J R Stockton 08-01-2008 05:11 PM

Re: .length is always 1
 
In comp.lang.javascript message <bb872553-f0ee-4d12-a0ee-203925d5bd62@d7
7g2000hsb.googlegroups.com>, Thu, 31 Jul 2008 06:35:59, Jorge
<jorge@jorgechamorro.com> 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.


All times are GMT. The time now is 02:39 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.