gruss Andreas,
Die Anzahl der Stellen und Nachkommastellen sind egal. Es geht
nur darum, dass ich den Preis sicher in ein Computer-tagliches
Format, also 12345.6789 umrechenn kann, indem ich einfach das
eine Komma durch einen Punkt ersetz.Jetzt will ich wie gesagt lediglich prüfen ob die Eingabe einem
der obigen Formate entspricht:/[0-9]*,?[0-9]+/
es gibt noch mehr moegliche formatierungen, ...
... die sich mit einem "einfachen regulaeren ausdruck"
nicht erschlagen lassen;
in javascript habe ich mal versucht das problem zu loesen,
indem ich die methode "String.forceToNumber()" schrieb;
diese konvertiert alle dezimalen zahlen-strings, deren
formatierungen "human readable" sind in die entsprechenden
fliesskommazahlen - unsinnige formatierungen werden auch
akzeptiert, aber deswegen heisst die methode ja "forceToNumber";
der js-code ist kommentiert und hilft Dir vielleicht weiter:
String.prototype.forceToNumber = function() {
var content = this;
var posDot = content.lastIndexOf("."); // letzte position von "." im string;
var posComma = content.lastIndexOf(","); // letzte position von "," im string;
var comma = "";
var regExpValue = /\d+/g;
var regExpMatch = null;
if ((posDot >= 0) || (posComma >= 0)) { // kommen "." oder "," im string ueberhaupt vor ?
if (((content.split(".")).length == 2) && ((content.split(",")).length == 2)) { // falls "." als auch "," den string in genau zwei teile zerlegen koennen, ...
content = content.split((posDot>posComma) ? (".") : (",")); //... nimm an, dass der kommaseparator dasjenige zeichen ist, welches an letzter stelle steht und teile den string genau dort;
} else if (((content.split(".")).length == 2) && ((content.split(",")).length != 2)) { // entzweit nur "." den string, ...
content = content.split("."); //... dann lege dieses zeichen als kommaseparator fest und teile den string genau dort;
} else if (((content.split(".")).length != 2) && ((content.split(",")).length == 2)) { // entzweit nur "," den string, ...
content = content.split(","); //... dann nimm dieses zeichen als kommaseparator und teile den string genau dort;
} else {
content = new Array(content); // anderenfalls handelt es sich um kein fuer diese methode relevantes zahlenformat;
}
} else {
content = new Array(content); // "." bzw. "," sind ueberhaupt nicht bestandteil der (formatierten?) zahl;
}
for (var i=0;i<content.length;i++) { // nimm dir die eintraege in "content" vor - (minimal 1 eintrag ohne kommaseparator / maximal 2 eintraege mit kommaseparator);
regExpMatch = content[i].match(regExpValue); // loese jede zahl die Du findest einzeln aus dem jeweiligen eintrag heraus;
content[i] = ""; // leg' den default-wert fuer den jeweiligen eintrag als leer-string fest;
if (regExpMatch) { // schau nach, ob im jeweiligen eintrag ueberhaupt zahlen vorhanden waren, ...
for (var k=0;k<regExpMatch.length;k++) { // ... wenn ja, dann nimm Dir jede zahl einzeln vor, ...
content[i] += regExpMatch[k]; // ... und fuege sie dem aktuellen default-wert hinzu;
}
}
}
return parseFloat((content.length == 1) ? (content[0]) : (content[0] + "." + content[1]));
// gab es nur einen eintrag, dann nimm eben nur diesen,
// gab es zwei eintraege, dann verbinde diese vorher mit einem "." -
// konvertiere das gesamtergebnis auf jeden fall in eine fliesskommazahl;
};
// var myNumber = "1 340 333,5678"; myNumber.forceToNumber() = 1340333.5678;
// var myNumber = "1,340,333.5678"; myNumber.forceToNumber() = 1340333.5678;
// var myNumber = "1.340,333.5678"; myNumber.forceToNumber() = 1340.3335678;
// var myNumber = "1,340,333,5678"; myNumber.forceToNumber() = 13403335678;
// var myNumber = "1,g40,3j3,5k7m"; myNumber.forceToNumber() = 1403357;
// var myNumber = "1.g40,3j3.5k7m"; myNumber.forceToNumber() = 140.3357;
// var myNumber = "1.g40,3j3,5k7m"; myNumber.forceToNumber() = 1.403357;
// var myNumber = "yy.mm.dd"; myNumber.forceToNumber() = NaN;
by(t)e by(t)e - peterS. - pseliger@gmx.net
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)