it-swarm.com.de

Benutzer, die die falschen Dezimaltrennzeichen für US-Dollar-Beträge eingeben

Ich habe eine Anwendung, die einen Dollarbetrag in USD akzeptiert. Leider sind einige Personen Ausländer/Besucher in den USA und geben Beträge anstelle von Punkten durch Kommas ein: Sie formatieren die Zahl als XXX.XXX, 00 anstelle des US-Formats XXX, XXX.00. Die verschiedenen erwarteten Formate verursachen Probleme. Obwohl das Texteingabefeld das "$" als Feldpräfix anzeigt und ich einen Platzhalter von "USD" habe, geben die Leute immer noch das falsche Format ein.

Beispiel:

Expected US: 345.60
User Enters: 345,6
accounting.js translates to: 3456.00

Der Benutzer zahlt dann $ 3456.00! Das ist offensichtlich nicht gut und ein großer Fehler. An diesem Punkt denke ich, dass es sehr schlecht für mich ist, überhaupt zu versuchen, den eingegebenen Text zu ändern. Stattdessen sollte ich den Benutzer zwingen, das Format korrekt (genau) einzugeben. Ich kann leicht eine Format-/Fehlermeldung unter dem Textfeld hinzufügen, die das richtige Format anhand von Beispielen ausführlicher beschreibt.

Wenn ich sie zwinge, das richtige Format einzugeben:

  • Soll ich Kommas zulassen?
  • Soll ich Kommas automatisch von der Eingabe entfernen?
  • Sollte ich einen Fehler auslösen, wenn ein Komma verwendet wird?
  • Sollte ich einen Fehler auslösen, wenn keine Dezimalstelle verwendet wird?

Hinweis: Ich bin nur zu diesem Zeitpunkt in das USD $ -Format gezwungen. Dezimalstellen sind zu 99% üblich, jedoch nicht erforderlich, damit die Transaktion stattfinden kann. Ich möchte einen regulären Ausdruck verwenden, um die Warnung auszugeben, z. B. /^\d*(\.\d{2}$)?$/.

45
jjwdesign

Lassen Sie uns eine Minute über Benutzererwartungen und Magie sprechen.

Ein Benutzer kommt mit bestimmten Erwartungen zu Ihrem Tool, und nicht die Erwartungen jedes Benutzers sind gleich. Sie sehen das aus erster Hand. Kultur, Erziehung und Lebenserfahrung bestimmen die Interaktion eines Benutzers mit einem Tool und eröffnen eine Vielzahl von Erwartungen, die möglicherweise erfüllt werden müssen.

Eine Erwartung, die fast jeder Benutzer hat, ist jedoch, dass der Illusionist seine Karte immer richtig erraten wird, wenn ein Illusionist oder Zauberer einen Trick macht - beispielsweise eine Karte aus einem Kartenspiel auswählen.

Anders ausgedrückt: Wenn Ihr Tool etwas automatisieren und erraten soll, was der Benutzer eingeben wollte, muss es diese Vermutung richtig machen . oder der Benutzer wird enttäuscht oder frustriert sein.

Wie Sie ebenfalls angegeben haben, können sie überlastet werden. Wenn Ihr System die von ihnen eingegebenen Daten ohne ausdrücklichen Wunsch ändert und den Betrag erhöht, können Sie rechtlich für die Überladung verantwortlich sein und in Schwierigkeiten geraten.

Raten oder nicht raten; das ist hier die Frage. Wir haben also zwei Vorgehensweisen zur Auswahl:

Option 1: Analysieren Sie, was eingegeben wurde, und korrigieren Sie es

In diesem Fall müssen Sie möglicherweise nach einer Lösung suchen, die alle angezeigten Edge-Fälle besser unterstützt. Wenn accounting.js den Text nicht korrekt neu formatiert, müssen Sie möglicherweise etwas Benutzerdefinierteres tun.

Geben Sie den regulären Ausdruck ein.

Was Sie tun müssen, ist herauszufinden, auf welche Muster Sie möglicherweise stoßen, welche korrekt sind und welche geändert werden müssen. Wenn wir uns mit häufigen Fällen befassen,

 - ###.###,## > ###,###.##?
 - ###,###,## > ###,###.##?
 - ######,## > ###,###.## or ##,###,###? 

Es wird ziemlich schnell schwierig. Dazu müssen Sie genügend Tests durchführen, um festzustellen, ob Ihre Test- und Ersatzmuster in Ordnung sind, und Sie müssen darauf achten, dass keine neuen Muster entstehen.

Wenn eines Ihrer Muster den Inhalt falsch ändert, bemerkt der Benutzer möglicherweise nicht, dass Sie den Betrag aktualisiert haben (oder wenn Sie ihn bitten, zu bestätigen, dass der aktualisierte Wert das ist, was er bedeutet, kann er eine wichtige Änderung verpassen) und endet den falschen Betrag bezahlen. Was mehr ist, wenn Sie es für sie getan haben, könnten Sie legal am Haken sein.

Option 2: Führen Sie sie zur richtigen Formatierung

Diese Option erfordert etwas weniger Arbeit und ist unter verschiedenen Gesichtspunkten sicherer. Es ist wahrscheinlich auch wahrscheinlicher, dass es zu einer angenehmen Benutzererfahrung kommt.

Suchen Sie hier noch nach einer seltsam formatierten Zeichenfolge. Zu viele Punkte, zu viele Ziffern zwischen Kommas, ein Komma, das die letzten beiden Zahlenfolgen begrenzt, solche Dinge.

Ich würde vorschlagen, eine Implementierung der Live-Feldvalidierung zu verwenden, um zu bestätigen, dass die Eingabe korrekt formatiert ist. Wenn sie etwas Seltsames eingeben, klicken Sie sofort oder versuchen Sie, das Formular zu senden. Vergewissern Sie sich, dass Sie die Zeichenfolge verarbeiten, um einen der gesuchten Tests zu kennzeichnen. Wenn ein Test fehlschlägt, zeigen Sie eine Nachricht neben oder unter dem Feld an (siehe einige dieser Bilder , um Ideen zum Anzeigen der Nachrichten zu erhalten), in der speziell erklärt wird, was seltsam aussieht.

Ändern Sie nichts automatisch - bitten Sie sie, dies selbst zu tun.

Überprüfen Sie erneut, sobald Sie können, ob sie die richtigen Änderungen vorgenommen haben. Tun Sie dies im Idealfall, bevor Sie erneut auf die Schaltfläche "Senden" klicken müssen, wenn Sie sich beispielsweise vom Feld weg konzentrieren. Wenn alles in Ordnung ist, zeigen Sie eine Meldung (in einer freundlichen Erfolgsfarbe wie Grün oder Blau) an, die besagt, dass der Fehler erfolgreich behoben wurde. Wenn sie versuchen müssen, das Problem erneut zu beheben, zeigen Sie erneut eine Fehlermeldung an und geben Sie an, dass Sie diese Option aktiviert haben, und sie haben noch mehr zu tun.

Oops, looks like it's still not quite right. <error mitigation message follows.>

Auf diese Weise wissen sie, dass sie noch Arbeit zu erledigen haben, und das Formular fordert ausdrücklich Folgemaßnahmen.

Edit: Abschließend ...

Betrachten Sie die Anwendungsfälle vor Ihnen und welche Option (oder Mischung aus beiden) Sie implementieren können, um die Erfahrung für den Benutzer vorhersehbar und verständlich zu machen.

Eine interessante Option, die beide kombiniert, ist die Maskierung, die @jjwdesign in den Kommentaren erwähnt hat. Das Formular kann entweder den Benutzer von Anfang an anleiten, wie die Konventionen ausgeführt werden, indem ein subtiles ___,___.__ Im Feld angezeigt wird, oder es kann die Interpunktion hinzufügen/konvertieren, wenn der Benutzer einen Wert eingibt. Wir müssen es nur sein Achten Sie darauf, dies nicht verwirrend zu tun. Wie einige in den Kommentaren auf der Seite hier hervorheben, kann das Überschreiben der Benutzereingaben verwirrend sein.

Viel Glück!

35
Matt

Eine andere Möglichkeit wäre, dass das Textfeld alle nicht numerischen Zeichen ignoriert und die entsprechende Formatierung automatisch anzeigt.

Zum Beispiel:

User enters '3' -> Text field displays '0.03'
User enters '4' -> Text field displays '0.34'
User enters ',' -> Text field displays '0.34' (no change)
User enters '5' -> Text field displays '3.45'
User enters '6' -> Text field displays '34.56'
54
Ghillie Dhu

Zeigen Sie dem Benutzer, was visuell erwartet wird, und zeigen Sie , wie die Maschine die des Benutzers interpretiert Eingang.

Mein Beitrag zum Brainstorming wäre:

  • Verwenden Sie einen Verweis auf das Scheckformular der alten Tage :)
  • Lassen Sie den Computer alle Kommas und Punkte ignorieren, die der Benutzer eingibt (im Übrigen: nicht numerische Zeichen).
  • Zeigen Sie (wenn Sie können) ein Bild im Hintergrund Ihres Textfelds an, das die Positionen der Dollars, die Cent und einen sie trennenden Punkt angibt.
  • Verwenden Sie für die Nummer eine Schriftart mit einem Abstand
  • Habe die Nummer rechtsbündig.

Wenn der Benutzer den Betrag eingibt, sieht er nun, wie das System seine Eingabe automatisch interpretiert, ohne dass ein Skript funktioniert (außer möglicherweise das Skript, das Kommas und Punkte ablehnt):

(draft explainging the idea

- -

27
Ideogram

Sie können grundsätzlich alles tun, was Sie möchten, solange Sie eine Möglichkeit zur Überprüfung der Eingabe bereitstellen. Ich persönlich würde - neben dem Eingabefeld - dynamisch den Betrag anzeigen, der zumindest teilweise ausgeschrieben ist, wie z

[ 123.45     ] (123 US dollars, 45 cents)
[ 123,45     ] (123 US dollars, 45 cents)
[ 123,456.78 ] (123 456 US dollars, 78 cents)
[ 123,456    ] (123 456 US dollars, 0 cents)

([] enthält die Eingabe () enthält die Überprüfung. Beachten Sie die Verwendung eines nicht mehrdeutigen Leerzeichens als Tausendertrenner.)

Ich sage nicht, dass die von mir vorgeschlagene Methode zur Interpretation der Eingabe die beste ist, aber Sie stellen eine sofortige Überprüfung bereit. Für mich (aus einem Land mit einem Dezimalkomma anstelle eines Dezimalpunkts) ist es intuitiv, ,XX als Cent, aber für andere Leute, ,XXX bedeutet Einheiten. Da eine sofortige Überprüfung erfolgt, sollte kein Schaden verursacht werden.

Hinweis: Denken Sie daran, sowohl die Benutzereingaben (für spätere Überprüfungen, was sie im Zweifelsfall tatsächlich geschrieben haben) als auch die Überprüfung (um sicherzugehen, dass der Benutzer die Interpretation gesehen und geglaubt hat) einzureichen und erneut zu überprüfen, ob sie konsistent sind, wenn Das Formular wird gesendet.

25
yo'

Sie können zwei Felder erstellen - eines für Dollar und eines für Cent. Auf diese Weise benötigen Sie keine Formatierungslogik und können nicht alphanumerische Zeichen entfernen, wenn Sie in einer Datenbank speichern.

13
SteveD

Gebietsschema ist das, worum es bei dieser Frage geht. Die Tatsache, dass Ihre Benutzer mit US-Dollar umgehen müssen, bedeutet nicht, dass sie dies im Gebietsschema des "Eigentümers" dieser bestimmten Währungseinheit (USA) tun. Datumsformate sind ein weiteres Beispiel dafür, wie verschiedene Gebietsschemas einen Wert auf mehrdeutige Weise rendern können, ohne das Gebietsschema zu kennen, in dem der Wert gerendert wurde.

Wie ein Mensch mit Gebietsschemainformationen umgeht, hängt von vielen Faktoren ab, die Sie als Programmierer nicht immer vorhersagen können. Was Sie tun können , ist, ihnen genügend Informationen zu geben, damit sie wissen, in welchem ​​Gebietsschema die Software ausgeführt wird oder in welchen Aspekten dieses Gebietsschemas sie sich befinden müssen Zurecht kommen. In HTML besteht eine Möglichkeit darin, lokalisierte Platzhalter zu rendern, die das erwartete Eingabeformat anzeigen.

Sie haben Ihre Besorgnis darüber zum Ausdruck gebracht, dass Personen versehentlich falsche Geldbeträge verarbeiten. Es kann sinnvoll sein, den Benutzer vor der Bearbeitung der Anfrage um endgültige Bestätigung zu bitten. Wenn Sie den eingegebenen Betrag analysieren und er in einem ungewöhnlichen Format vorliegt, da er Dezimal- und Gruppentrennzeichen verwendet, die sich von denen in en_US Unterscheiden, können Sie immer eine Meldung anzeigen, in der der Benutzer gefragt wird, ob er den richtigen Betrag eingegeben hat.

7
Xano

Die UX-Lösung besteht darin, sie für die Benutzer fehlerfrei zu machen, unabhängig davon, an welches Format sie gewöhnt sind. Nichts mehr. Nicht weniger.

Ich würde empfehlen, dass Sie sich mit Regex-Lösungen befassen:

  1. stellen Sie sicher, dass nach dem Komma zwei Ziffern stehen (fügen Sie gegebenenfalls eine 0 hinzu).
  2. entfernen Sie dann alle nicht Ziffern
  3. fügen Sie dann den Dezimalpunkt hinzu.
345,6 becomes 
345,60 becomes 
34560 becomes
345.60

Unabhängig vom Prozess oder Ihren Back-End-Tools machen Sie es Ihren Benutzern einfach. Wenn sie 345,6 (anstelle von 345,60) erwarten, lassen Sie sie.

6
Mayo

Auf der Bankenseite, die ich in Belgien verwende, können Sie nur die Dezimalschreibweise eingeben, nicht jedoch das Tausendertrennzeichen.

Es akzeptiert entweder ein einzelnes Komma oder einen einzelnes Punkt für die Dezimalschreibweise, es kann jedoch nichts anderes eingegeben werden.

Ich habe einige weitere Tests durchgeführt, wie sie das Eingabefeld behandeln.

  1. Sie können , Oder . Nur einmal für die Dezimalschreibweise verwenden, kein Tausendertrennzeichen
  2. Wenn Sie 4, Eingeben, versuchen Sie, 4,, Eingeben. Es passiert nichts. Wie bei 4,000. Können Sie den . Nicht hinzufügen.
  3. Sie können 4000.00 Oder 4000,00 Eingeben und beide werden in 4000,00 Konvertiert.
  4. Kopieren und Einfügen ist nicht erlaubt
  5. 4,000 Wird in 4,00 Konvertiert - dies ist ein Problem, sicherlich für eine Bankseite, aber es würde nur für Personen auftreten, die tausend Trennzeichen eingeben, nicht wie im Fall des OP, in dem Personen verwenden Kommas für die Dezimalschreibweise. Da das Kopieren und Einfügen nicht zulässig ist, gilt dies nur für Personen, die das Tausendertrennzeichen eingeben möchten. Dies geschieht normalerweise nur aus Gründen der Lesbarkeit. Möglicherweise müssen Sie jedoch testen, wie viele Personen dies tun würden.
5
icc97

Im Allgemeinen versuchen Sie, Fehler zu vermeiden, sie sind meiner Meinung nach die Benutzeroberfläche des letzten Auswegs. Wenn die Systemlogik irgendetwas handhaben kann, um Fehler zu vermeiden, sollte dies die Lösung sein. Vermeiden Sie es auch, sie in eine bestimmte Formatierung zu zwingen. Versuchen Sie, die verwendete Formatierung und die Mikrointeraktionen vorwegzunehmen und Ihr System darauf abzustimmen.

Eine Frage an Sie ... Wie oft werden Personen Dezimalbeträge in dieses Feld eingeben?

Mein Vorschlag wäre, die Zahl standardmäßig so zu formatieren, dass sie standardmäßig angezeigt wird, wenn der Benutzer sie zum ersten Mal sieht und eine Benutzereingabe zwischen dem Dollarzeichen und dem Dezimalpunkt liegt. Wenn Sie es so implementieren, wird jede Benutzereingabe als Dollarbetrag interpretiert, und wenn Benutzer niemals Dezimalbeträge eingeben, können Sie dort anhalten.

Wenn Sie jedoch Dezimalbeträge berücksichtigen müssen, können Sie eine Änderung des Dezimalbetrags verhindern, bis der Benutzer "." auf ihrer Tastatur geben sie an dieser Stelle den Dezimalabschnitt des Feldes ein. Um Ihr spezifisches Problem zu lösen, können Sie "" genauso behandeln. Wenn Benutzer auf ihrer Tastatur "," eingeben, geben Sie sie in den Dezimalbetrag ein.

Die Benutzerinteraktion würde also als solche folgen ...

  1. Geben Sie den Dollarbetrag ein
  2. Schlüssel "." oder ","
  3. Geben Sie den Dezimalbetrag ein
  4. Fertig
3
Jake Barnett

Ich hatte in der Vergangenheit das Problem mit einer App für deutsche Benutzer. Ich hielt mich an die Punktnotation (für Computer) und schrieb ein js, um alle Kommas in Punkte umzuwandeln (keine Notwendigkeit, das 1000er-Trennzeichen einzugeben, das js würde dafür Leerzeichen anzeigen). Ich wollte sicherstellen, dass kein Komma den Backend-Server erreicht.

Es gab unterschiedliche Antworten der Benutzer. Einige bemerkten nichts (z. B. Nichtdeutsche). Einige waren überrascht, aber daran angepasst (z. B. Bloomberg-Benutzer). Einige waren verwirrt und fragten nach dem Komma (z. B. starke Nur-Excel-Benutzer).

Achtung: Genau das habe ich getan. Ich bin keine UX-Person, die jugden kann, wenn ein solcher Ansatz eine gute Sache ist.

1
user81598

Ich neige dazu, autoNumeric für Zahleneingabefelder zu verwenden. Ich setze es immer so, dass sowohl Komma als auch Punkt/Punkt/wie auch immer Sie es als Dezimaltrennzeichen akzeptieren, ohne Tausendertrennzeichen (im Ernst, wer würde es überhaupt in Eingabe verwenden?) Selbst wenn Sie es so einrichten, dass Komma als Dezimaltrennzeichen akzeptiert wird, wenn Sie eine Zahl mit Komma einfügen, wird es einfach gelöscht (ich schreibe gerade ein Problem) ... Aber zumindest bei Tastatureingaben verhält es sich richtig

0
zakius

Die Eingabe muss einen einzelnen Punkt gefolgt von genau zwei Ziffern ohne Kommas enthalten. Erlauben Sie dem Benutzer jedoch, mehrere Punkte und Kommas in das Feld einzugeben. Wenn diese Anforderungen nicht erfüllt sind, wenn der Benutzer außerhalb des Felds klickt, lehnen Sie die Eingabe ab und zeigen Sie einen Textfehler an, sodass der Benutzer Streukommas manuell entfernen und einen Punkt und die Anzahl der Cent eingeben muss.

Vor dem Feld kann eine Notiz platziert werden: "Die Eingabe muss mit .XX enden, z. B. $ XXXX.XX".

Wenn der Benutzer Kommas eingibt, diese jedoch manuell entfernen muss, besteht keine Möglichkeit, dass der Benutzer davon ausgeht, dass ein Komma akzeptiert wurde. Und da der Punkt- und Centbetrag erforderlich ist, muss der Benutzer sehen, dass die Eingabe Cent enthält.

0
Tenfour04