Sorry, I got carried away
Code:
var regexes = [ /^(\d{4})-(\d{4})$/, /^(\d{2})-(\d{4})-(\d{4})$/ ];
// the user can push() new regex into this array.
function testPhones(elems) {
// Returns an array, possibly of just one element.
// The array will have the same size as elems.length and will contain:
// -1 if that element fails all tests, -2 if there is nothing to test,
// or the index (0, 1, 2, etc.) of the regex that it met.
var phoneResults = [], regLen = regexes.length, elLen = elems.length;
phoneResults.passed = true;
for (var i = 0; i < elLen; i++) {
phoneResults[i] = -1;
for (var j = 0; j < regLen; j++) {
var theVal = elems.eq(i).val() || elems.eq(i).text();
if (!theVal) { // no phone number/blank
phoneResults[i] = -2;
phoneResults.passed = false; // at least one blank
break;
} else if ( regexes[j].test(theVal) === true ) {
phoneResults[i] = j;
break;
}
}
if (phoneResults[i] == -1) {
phoneResults.passed = false; // at least one fail
}
}
return phoneResults;
}
var testThese = testPhones($('.number'));
if (testThese.passed) {
alert('They all passed!');
}
var lElems = $('.number').length;
for (var i=0; i < lElems; i++) {
if (testThese[i] >= 0) {
alert('Element ' + i + ' passed regex: ' + regexes[testThese[i]]);
} else if (testThese[i] == -1) {
alert('Element ' + i + ' failed all tests.');
// display an error message next to the input?
} else { // -2
alert('Element ' + i + ':nothing to test!');
}
}
but I haven't tested yet. Please feel free to ignore any of this - I won't be upset.
Andy.