Hi all, I have a contact for that requires validating for a number of things. It validates Required for all parts of the form however fine.
My question is how can I ensure the client fills out the form fully. For instance, here in the UK we use 11 digits for phone numbers, but the form will validate if the clint enters just 1, so how can I ensure the customer actually enters all 11.
Here is the javascript I am using
function isFilled(str){ return (str != ""); }
function isEmail(str) { return (str.indexOf(".") > 2) && (str.indexOf("@") > 0); }
function isDigital(str) { return(parseFloat(str,10)==(str*1)); }
function isCurrency(val) { var re = /^(\\$?\\d+\\$?|\\$?\\d+\\.\\d+\\$?)$/; return (re.test(val)); }
function ValidForm(form) {
var field, i;
var req = new Array(10);
var email = new Array(1);
var digits = new Array(1);
var currs = new Array(0);
req[0] = "rw_First_Name";
req[1] = "rw_Last_Name";
req[2] = "re_Email";
req[3] = "rd_Mobile_Number";
req[4] = "r_Hair_Service";
req[5] = "r_Stylist";
req[6] = "r_Preferred_Day";
req[7] = "r_Preferred_Date";
req[8] = "r_Month";
req[9] = "r_Preferred_Time";
email[0] = "re_Email";
digits[0] = "rd_Mobile_Number";
for (i=0;i<10;i++) {
eval("field = form." + req[i]);
if (!isFilled(field.value)) {
alert("Field '" + field.title + "' is required to be filled in before successful submission.");
field.focus();
return false;
break;
}}
for (i=0;i<1;i++) {
eval("field = form." + email[i]);
if (!isEmail(field.value)) {
alert("Field '" + field.title + "' is required to be filled in with valid email addresses before successful submission.");
field.focus();
return false;
break;
}}
for (i=0;i<1;i++) {
eval("field = form." + digits[i]);
if (!isDigital(field.value)) {
alert("Field " + field.title + " is required to be filled in only with digits (0-9) and decimal point before successful submission.");
field.focus();
return false;
break;
}}
for (i=0;i<0;i++) {
eval("field = form." + currs[i]);
if (!isCurrency(field.value)) {
alert("Field " + field.title + " is required to be filled in only with digits (0-9) a decimal point, or a dollar sign before successful submission.");
field.focus();
return false;
break;
}}
return true; }
Are you sure? I would rewrite most of what you are already using.
After removing the eval parts and performing a simple restructure of the validation information, this is what we get:
function isFilled(str) {
return str.length > 0;
}
function isEmail(str) {
return str.indexOf(".") > 2 && str.indexOf("@") > 0;
}
function isDigital(str) {
return !isNaN(Number(str));
}
function isCurrency(val) {
var re = /^(\\$?\\d+\\$?|\\$?\\d+\\.\\d+\\$?)$/;
return re.test(val);
}
function ValidForm(form) {
var validationRules = [
{name: 'rw_First_Name', required: true},
{name: 'rw_Last_Name', required: true},
{name: 're_Email', required: true, email: true},
{name: 'rd_Mobile_Number', required: true, digits: true},
{name: 'r_Hair_Service', required: true},
{name: 'r_Stylist', required: true},
{name: 'r_Preferred_Day', required: true},
{name: 'r_Preferred_Date', required: true},
{name: 'r_Month', required: true},
{name: 'r_Preferred_Time', required: true}
],
i,
field,
validate;
for (i = 0; i < validationRules.length; i += 1) {
validate = validationRules[i];
field = form.elements[validate.name];
if (validate.required && !isFilled(field.value)) {
alert("Field '" + field.title + "' is required to be filled in before successful submission.");
field.focus();
return false;
}
if (validate.email && !isEmail(field.value)) {
alert("Field '" + field.title + "' is required to be filled in with valid email addresses before successful submission.");
field.focus();
return false;
}
if (validate.digits && !isDigital(field.value)) {
alert("Field " + field.title + " is required to be filled in only with digits (0-9) and decimal point before successful submission.");
field.focus();
return false;
}
if (validate.currency && !isCurrency(field.value)) {
alert("Field " + field.title + " is required to be filled in only with digits (0-9) a decimal point, or a dollar sign before successful submission.");
field.focus();
return false;
}
}
return true;
}
Hopefully the code is easier to understand now, and should be easier to modify to achieve your desired end result.
Thi looks like a good bit of code but I have no idea how to include it?
function testTelNumber () {
var myTelNo = document.getElementById(‘telnumber’).value;
// If invalid number, report back error
if (!checkUKTelephone (myTelNo)) {
alert (telNumberErrors[telNumberErrorNo]);
}
// Otherwise redisplay telephone number on form in corrected format
else {
document.getElementById(‘telnumber’).value = checkUKTelephone (myTelNo);
alert (“Telephone number appears to be valid”);
}
}
Because you now don’t have anything else that required digits, that section of code can be updated to use the isTelephoneNumber function instead.
if (validate.[s][color="red"]digits[/color][/s][color="green"]telephone[/color] && ![s][color="red"]isDigital[/color][/s][color="green"]isTelephoneNumber[/color](field.value)) {
alert("Field " + field.title + " is required to be filled in [s][color="red"]only with digits (0-9) and decimal point before successful submission[/color][/s][color="green"]with an 11 digit telephone number[/color].");
field.focus();
return false;
}
Ok Paul and as it Xmas get you head around this one. Some areas of the UK area use 10 or 11 digits?
It ought to be enough to check that…
a) only digits are entered (strip non-digits for checking) - or allow only digits space hyphen in the input box onkeyup.
b) first digit is 0
c) total digits are 10 or 11.
After the function gets the digits, you can instead test it against a regular expression for what you need.
In this case that would be starting with a zero, followed by 9 or 10 digits.