von einer Funktion zurückkehrend nicht auf magische Weise das machen, dass es Ende genannt wird, viel weniger einen bestimmten Rückgabewert verwenden.
Wenn Sie das tun wollen, haben Sie eine Variable setzen, dass die äußere Funktion verwenden:
checkipAddress = function(value){
var rv = true; // <=== Default return value
var array = value.split('.');
$.each(array, function(index,val){
if(parseInt(val)>255)
return rv = false; // <=== Assigns false to `rv` and returns it
});
return rv; // <=== Use rv here
}
Randbemerkung: Ihre Funktion wird gerne IP Strings wie "0.-234343.-1.0"
und "1foo.2foo.3foo.4foo"
ermöglichen. Sie sollten erwägen:
checkipAddress = function(value){
var rv = true; // <=== Default return value
var array = value.split('.');
$.each(array, function(index,str){
str = $.trim(str);
var val = +str;
if(!str || val < 0 || val > 255)
return rv = false; // <=== Assigns false to `rv` and returns it
});
return rv; // <=== Use rv here
}
Das ist ein bisschen besser, aber es ist auch prüfen nicht, ob es genau vier Teile der IP und ermöglicht Werte wie "1.1e2.3.4"
(Exponenten-Darstellung). Und all dies ist natürlich spezifisch für IPv4, während wir in eine IPv6-Welt eintreten ...
Bleibt bei IPv4, wenn es Ihr Ziel ist sicherzustellen, dass es sich um eine vierteilige IPv4-Adresse handelt Form, würde ich für regex plump:
checkipAddress = function(value){
var rv;
var match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(value);
var n, part;
if (match) {
rv = true;
for (n = 1; rv && n < 5; ++n) {
part = +match[n]; // We know it's not blank from the regex
if (part > 255) { // We know it's not negative or fractional from the regex
rv = false;
}
}
} else {
rv = false;
}
return rv;
}
oder auf modernen Browsern (oder ein anständiges Array#every
Shim verwenden):
checkipAddress = function(value){
var match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(value);
rv = !match ? false : Array.prototype.slice.call(match, 1).every(function(entry) {
// We know it's not blank, negative, or fractional from the regex
return +entry <= 255;
});
return rv;
}
Wenn Sie 'zurückkehren sagen false;' im '$ .each' Anweisung, Sie kommen nur von dieser Funktion zurück und nicht 'checkipAddress'. – jrad
@jrad Ich habe den Punkt jetzt :) danke –