2016-11-02 5 views
-2

Ich habe ein Betragsfeld, das ich automatisch alle $ Zeichen entfernen möchte, die der Benutzer eingegeben. Zum Beispiel, wenn sie in $ 50 -Ich möchte, dass automatisch auf 50 ändern Denn wenn sie $ 12.50 eingeben, ändert sich das automatisch auf 12.50.

Ich habe das folgende Skript.

$('#searchAmt').on('keyup',function(){ 
var oldtxt = $(this).val(); 
var findtxt = '^[$]'; 
var newtxt = oldtxt.replace(new RegExp(findtxt, 'g'), ''); 
$(this).val(newtxt); 
}); 

Dies funktioniert das Dollarzeichen bei der Beseitigung, aber es ist das Entfernen auch jede Nachkommastelle der Benutzer legt also über die Beispiele verwenden, es ändert sich $ 50 bis 50 aber es ändert sich $ 12,50 zu 1250.

Es ist erwähnenswert, dass das Eingabefeld, das ich für diesen benutze, einen Eingabetyp der Zahl hat. In Safari & Chrome, dies verhindert, dass der Benutzer eine $ - aber in Firefox und IE, kann der Benutzer immer noch ein $.

+0

Es scheint, dass es einige andere Stück Code, den Punkt entfernt. '^ [$]' entspricht nur einem '$' Symbol am Anfang der Zeichenfolge. –

+0

Was passiert, wenn sie '£' eingeben? Ist es nicht besser, nach Zahlen zu suchen und das zu behalten? – vlaz

+0

Bitte klären Sie, indem Sie Ihren relevanten Code hinzufügen, oder die Leute werden irrelevante Antworten posten. Bitte überprüfen Sie den Funktionscode "keydown". –

Antwort

2

.replace akzeptiert auch eine Zeichenfolge als Argument anstelle von regulären Ausdrücken. Versuchen Sie dies:

var oldtxt = $(this).val(); 
var newtxt = oldtxt.replace("$", ""); 

Dies wird $ entfernen.

Alternativ können Sie alles entfernen, die nicht mit diesem eine Zahl oder Dezimalzahl ist:

var newtxt = oldtxt.replace(/[^0-9.]/g, ""); 

Es ist nicht für eine Zahl mit mehreren Perioden ausmachen. Um diese loszuwerden, versuchen Sie dies, was nur das letzte Vorkommen eines Zeitraums zurücklassen wird:

var newtxt = oldtxt.replace(/[^0-9.]|\.(?=.*\.)/g, ""); 

Ich mag RegEx.

+0

Dies scheint die einfachste Lösung zu sein, aber nach weiteren Tests sieht es so aus, als ob das Problem mit der Dezimalzahl bei $ (this) .val (newtxt) auftritt. Ich denke, ich muss vielleicht überdenken, wie man verhindert, dass ein $ eingegeben wird. – rmlumley

+1

@rmlumley verwenden ''? – vlaz

+0

@ vlaz Ich bin. Es funktioniert perfekt in Safari & Chrome. Das Problem ist Firefox & IE erlaubt Ihnen immer noch ein $ einzugeben. – rmlumley

0

Sie können einfach verwenden:

console.log('$50\n$60'.replace(/[$]/g, ''));

0
var regex = new RegExp('^[$]') 

oder

var regex = new Regex('^\\\$') 

Dies wird nur entfernen Sie die $ Zeichen, wenn es zu Beginn der Zeichenfolge auftritt.

Ausgabe von Chromkonsole

var regex = new RegExp('^[$]') 

var oldtxt = "$12.50" 

newtxt = oldtxt.replace(regex, '') 

"12.50" 
+0

'Das Dollarzeichen muss entgangen sein' nein, es tut nicht - das Dollarzeichen verliert seine spezielle Bedeutung in eckigen Klammern. Es muss entweder maskiert sein _oder_ muss innerhalb von '[]' liegen, da beides nicht benötigt wird und einfach dazu dient, die Regex zu überladen. – vlaz

+0

Auch Sie haben es nicht tatsächlich entkommen - da es eine Zeichenfolge ist, müssen Sie das Escape-Zeichen zu entkommen, denn im Moment erzeugt dies eine Zeichenfolge mit einem Literal $ (und das hat keine besondere Bedeutung in Strings zu beginnen). – vlaz

+0

@vlaz Sie haben Recht. änderte die Antwort –

Verwandte Themen