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

format a field (input in form) onblur

P: n/a
Hi Gurus

In my quest in putting my first javascript together, I am now trying to
conquer something that seems trivial, but has taken me hours.

I would like to format a field in a form once the person has completed it.
The format should be "00". For example, if the person puts 1 then it should
become 01 and if the person puts 12 in the field then it should stay like
that. If the person puts 2004 then it should become 04, and if the person
puts 012 then it should become 12.

At the same time, it would also be cool if we can warn the user that it
should only contain numbers [0-9].
Tia
- Nicolaas
Jul 23 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
WindAndWaves wrote:
I would like to format a field in a form once the person has completed it.
The format should be "00". For example, if the person puts 1 then it should
become 01 and if the person puts 12 in the field then it should stay like
that. If the person puts 2004 then it should become 04, and if the person
puts 012 then it should become 12.

At the same time, it would also be cool if we can warn the user that it
should only contain numbers [0-9].


Check the manual for the "substring" String method, or the "replace"
String method with a regexp:

<URL:http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/string.html#1194665>
<URL:http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/string.html#1194258>
Here's an illustration:

---
<form action="" onsubmit="return validate(this)">
<input type="text" onblur="check(this, 'foo1', 'empty', '2num')">
<input type="text" onblur="check(this, 'foo2', 'empty', '2num')">
<input type="text" onblur="check(this, 'foo3', 'empty', '2num')">
<input type="submit">
</form>

<script type="text/javascript">
function padLeft(str, pad, count) {
while(str.length<count)
str=pad+str;
return str;
}

function check(el, field) {
//controller
var result={error:""};
for(var ii=2; ii<arguments.length; ii++)
if((result=singleCheck(el, field, arguments[ii])).error)
break;
return result;

//single check
function singleCheck(el, field, type) {
var result={error:""};
switch(type) {
case "empty" :
if(/^\s*$/.test(el.value)) {
result.error="field "+field+" : should not be empty.";
}
break;
case "2num" :
if(!/^\d+$/.test(el.value)) {
result.error="field "+field+" : should contain only numbers.";
} else {
el.value=
padLeft(el.value.replace(/^\d+(\d\d)$/,"$1"), "0", 2);
}
break;
}

if(el.style)
el.style.borderColor = result.error ? "#c00" : "";

return result;
}
}

function validate(form){
var a=[], msg=[], index=1;

// re-test the fields
a[a.length]=check(form.elements[0], "foo1", "empty", "2num");
a[a.length]=check(form.elements[1], "foo2", "empty", "2num");
a[a.length]=check(form.elements[2], "foo3", "empty", "2num");

//analyse the tests
for(var ii=0; ii<a.length; ii++)
if(a[ii].error)
msg[msg.length]=(index++)+" - "+a[ii].error;

//alert the message, if any
if(msg.length)
alert(msg.join("\n"));

//handle form's submission
return !msg.length;
}
</script>
---
HTH
Yep.
Jul 23 '05 #2

P: n/a

"Yann-Erwan Perio" <y-*******@em-lyon.com> wrote in message
news:41***********************@news.free.fr...
WindAndWaves wrote:
I would like to format a field in a form once the person has completed it. The format should be "00". For example, if the person puts 1 then it should become 01 and if the person puts 12 in the field then it should stay like that. If the person puts 2004 then it should become 04, and if the person puts 012 then it should become 12.

At the same time, it would also be cool if we can warn the user that it
should only contain numbers [0-9].
Check the manual for the "substring" String method, or the "replace"
String method with a regexp:

<URL:http://devedge.netscape.com/library/...pt/1.5/referen
ce/string.html#1194665> <URL:http://devedge.netscape.com/library/...pt/1.5/referen
ce/string.html#1194258>

Here's an illustration:

---
<form action="" onsubmit="return validate(this)">
<input type="text" onblur="check(this, 'foo1', 'empty', '2num')">
<input type="text" onblur="check(this, 'foo2', 'empty', '2num')">
<input type="text" onblur="check(this, 'foo3', 'empty', '2num')">
<input type="submit">
</form>

<script type="text/javascript">
function padLeft(str, pad, count) {
while(str.length<count)
str=pad+str;
return str;
}

function check(el, field) {
//controller
var result={error:""};
for(var ii=2; ii<arguments.length; ii++)
if((result=singleCheck(el, field, arguments[ii])).error)
break;
return result;

//single check
function singleCheck(el, field, type) {
var result={error:""};
switch(type) {
case "empty" :
if(/^\s*$/.test(el.value)) {
result.error="field "+field+" : should not be empty.";
}
break;
case "2num" :
if(!/^\d+$/.test(el.value)) {
result.error="field "+field+" : should contain only numbers.";
} else {
el.value=
padLeft(el.value.replace(/^\d+(\d\d)$/,"$1"), "0", 2);
}
break;
}

if(el.style)
el.style.borderColor = result.error ? "#c00" : "";

return result;
}
}

function validate(form){
var a=[], msg=[], index=1;

// re-test the fields
a[a.length]=check(form.elements[0], "foo1", "empty", "2num");
a[a.length]=check(form.elements[1], "foo2", "empty", "2num");
a[a.length]=check(form.elements[2], "foo3", "empty", "2num");

//analyse the tests
for(var ii=0; ii<a.length; ii++)
if(a[ii].error)
msg[msg.length]=(index++)+" - "+a[ii].error;

//alert the message, if any
if(msg.length)
alert(msg.join("\n"));

//handle form's submission
return !msg.length;
}
</script>
---
HTH
Yep.


Cheers - I will have a go at that. Thank you.
Jul 23 '05 #3

P: n/a
"Yann-Erwan Perio" <y-*******@em-lyon.com> wrote in message
news:41***********************@news.free.fr...
WindAndWaves wrote:
I would like to format a field in a form once the person has completed it. The format should be "00". For example, if the person puts 1 then it should become 01 and if the person puts 12 in the field then it should stay like that. If the person puts 2004 then it should become 04, and if the person puts 012 then it should become 12.

At the same time, it would also be cool if we can warn the user that it
should only contain numbers [0-9].
Check the manual for the "substring" String method, or the "replace"
String method with a regexp:

<URL:http://devedge.netscape.com/library/...pt/1.5/referen
ce/string.html#1194665> <URL:http://devedge.netscape.com/library/...pt/1.5/referen
ce/string.html#1194258>

Here's an illustration:

---
<form action="" onsubmit="return validate(this)">
<input type="text" onblur="check(this, 'foo1', 'empty', '2num')">
<input type="text" onblur="check(this, 'foo2', 'empty', '2num')">
<input type="text" onblur="check(this, 'foo3', 'empty', '2num')">
<input type="submit">
</form>

<script type="text/javascript">
function padLeft(str, pad, count) {
while(str.length<count)
str=pad+str;
return str;
}

function check(el, field) {
//controller
var result={error:""};
for(var ii=2; ii<arguments.length; ii++)
if((result=singleCheck(el, field, arguments[ii])).error)
break;
return result;

//single check
function singleCheck(el, field, type) {
var result={error:""};
switch(type) {
case "empty" :
if(/^\s*$/.test(el.value)) {
result.error="field "+field+" : should not be empty.";
}
break;
case "2num" :
if(!/^\d+$/.test(el.value)) {
result.error="field "+field+" : should contain only numbers.";
} else {
el.value=
padLeft(el.value.replace(/^\d+(\d\d)$/,"$1"), "0", 2);
}
break;
}

if(el.style)
el.style.borderColor = result.error ? "#c00" : "";

return result;
}
}

function validate(form){
var a=[], msg=[], index=1;

// re-test the fields
a[a.length]=check(form.elements[0], "foo1", "empty", "2num");
a[a.length]=check(form.elements[1], "foo2", "empty", "2num");
a[a.length]=check(form.elements[2], "foo3", "empty", "2num");

//analyse the tests
for(var ii=0; ii<a.length; ii++)
if(a[ii].error)
msg[msg.length]=(index++)+" - "+a[ii].error;

//alert the message, if any
if(msg.length)
alert(msg.join("\n"));

//handle form's submission
return !msg.length;
}
</script>
---
HTH
Yep.



THANK YOU IT WORKS FANTASTIC!
Jul 23 '05 #4

P: n/a
On Sat, 25 Sep 2004 22:16:35 +1200, WindAndWaves wrote:
Cheers - I will have a go at that.


Could you *please* have a go at trimming lines that
are no longer relevant or needed. Simply posting
one line replies at the bottom of over 100 lines of
earlier post is not the way to go.
<http://www.physci.org/codes/javafaq.jsp#netiquette>

'in-line with trimming' is arguably the best way to
post, for poster and audience alike.

--
Andrew Thompson
http://www.PhySci.org/codes/ Web & IT Help
http://www.PhySci.org/ Open-source software suite
http://www.1point1C.org/ Science & Technology
http://www.lensescapes.com/ Images that escape the mundane
Jul 23 '05 #5

P: n/a
> Could you *please* have a go at trimming lines that
are no longer relevant or needed. Simply posting
one line replies at the bottom of over 100 lines of
earlier post is not the way to go.
<http://www.physci.org/codes/javafaq.jsp#netiquette>


How about the trim in this one? By the way, what does <--SNIP --> mean?
Jul 23 '05 #6

P: n/a
On Mon, 27 Sep 2004 13:05:06 +1200, WindAndWaves wrote:
Could you *please* have a go at trimming lines ..
... How about the trim in this one?
Excellent.
..By the way, what does <--SNIP --> mean?


<SNIP> (and variants) simply mean a section of text was removed.
I often just put '...' before the text resumes. If the reader
cannot figure that out, there is something wrong with them. ;-)

--
Andrew Thompson
http://www.PhySci.org/codes/ Web & IT Help
http://www.PhySci.org/ Open-source software suite
http://www.1point1C.org/ Science & Technology
http://www.lensescapes.com/ Images that escape the mundane
Jul 23 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.