By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,713 Members | 2,012 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,713 IT Pros & Developers. It's quick & easy.

.length is always 1

P: n/a
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 '08 #1
Share this Question
Share on Google+
6 Replies


P: n/a
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.
Jul 30 '08 #2

P: n/a
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
Jul 30 '08 #3

P: n/a
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 '08 #4

P: n/a
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 '08 #5

P: n/a
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.
Jul 31 '08 #6

P: n/a
In comp.lang.javascript message <bb872553-f0ee-4d12-a0ee-203925d5bd62@d7
7g2000hsb.googlegroups.com>, Thu, 31 Jul 2008 06:35:59, Jorge
<jo***@jorgechamorro.composted:
>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.htmjscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/TP/BP/Delphi/jscr/&c, FAQ items, links.
Aug 1 '08 #7

This discussion thread is closed

Replies have been disabled for this discussion.