6 ms·
I just want a phone number input box that will strip dashes for me. Many go to the effort of having an error message pop up that says "no dashes or parentheses
by martincmartin 5y ago
I just want a phone number input box that will strip dashes for me.
Many go to the effort of having an error message pop up that says "no dashes or parentheses allowed." So they went to the effort of writing special case code to notice and handle this ... by giving instructions to the person, instead of the computer.
- jpswade 5y agoThere's a school of thought in interface design that you shouldn't change what the user inputs, as it can be a jarring experience for regular users.
- LudwigNagasena 5y agoWhat’s jarring is that a field for phone numbers can’t parse dashes and spaces.
- martincmartin 5y agoBut the changing isn't user visible. To the user, the phone number is the string "(416) 555-1270". If you want to store it differently in your database go ahead. But to the user, the phone number has dashes. In fact, on my phone, when I type in just the digits, my phone inserts the parens and dashes. Presumably, users consider this easier to read, and dare I say, more canonical. So, many applications can't handle phone number input in the exact form they display it to the user.
- lelandfe 5y ago> I just want a phone number input box that will strip dashes for me. So you don't actually want the input box to strip dashes, right? It sounds like you want more sites to accept dashes.
- martincmartin 5y agoVery true. I wasn't very precise in my original comment.
- kevincox 5y agoYup. My role of accepting phone numbers is `input.replace(/[^0-9+]/g, "")`. It might strip some expected information in rare cases but good enough for me. This works for a lot of other things that people format wildly like Canadian postal codes (which are A1A 1A1 format but many places require presence or absence of a space), credit cards (strip the spaces) and so many other fields.
- Aachen 5y agoWhy not simply leave it as the user input the value? Validation is one thing, but silently dropping information cannot possibly be helpful for the person that then has to call this number. I agree it should work for any phone number I've ever encountered, but just why
- jodrellblank 5y agoWill it work for the convention in the UK of writing +44 (0)1234 567 8901 which says to use 01234 dialling code inside the UK or 441234 if calling from another country, and don’t dial 4401234 ever?
- jacurtis 5y agoA truly global phone number regex is quite literally impossible to make. There are too many combinations and expectations built into these conventions. You listed several here. The "best" solution is to separate country code into a different field or input. Then have everything other than the country code (generally called a "subscriber number") added to another input. Then on the backend you would essentially strip out all the non-numeric characters from the subscriber number and combine the country code and stripped "subscriber number" into an E.164 format number and store that in the database. (Source) I have spent a decade dealing with phone numbers in databases and web forms. This is the "best" way to handle it, and even it isn't bulletproof, but it works 99.8% of the time. The best way to handle the other 0.2% of cases is to make a descriptive error message that explains to the user how you are expecting them to input their number (ie. No extensions, etc). Here is the E.164 standard: https://www.itu.int/rec/T-REC-E.164/ https://www.itu.int/rec/T-REC-E.164/
- jeroenhd 5y agoI was convinced that this already existed in the form of masked inputs, but after trying I realised those are broken in mobile Chromium and utterly unusable in mobile Firefox. As far as native components go, I think most platforms actually have a prebuilt control for this that works pretty well in my experience. You'll probably need to do more than just strip dashes, though. You also need to strip spaces and parenthesis but keep other characters such as + and ~. Many prebuilt phone number input boxes have trouble with even normal American phone numbers, let alone foreign phone number systems. Even if you're only targeting American customers, you'll probably need to support the phone number format for a visiting foreigner as well. With something as complex as phone numbers I'd just stick to using standard form validation code (like in the HTML standard) to warn users of explicitly invalid input like letters or most special characters and storing phone numbers as a 20 character random text strings for all other purposes. Phone numbers are like time zones, you'd think they're easy to deal with but they're surprisingly finicky to get right.
- atoav 5y agoThis is like when on a cli application -h displays a hint that you probably meant --help (or the other way around). If you already know someone wants to display the help, why not just display it?
- cute_boi 5y agosounds like python which don't accept ctrl + c and says you to do ctrl + d or something (i don't know python)
- klodolph 5y agoctrl + c is accepted, it means "interrupt the current operation", like it does if you are in bash. If there's no current operation, Python has no way of knowing for sure if you intended to exit, or if you intended to interrupt an operation, but the operation finished before you pressed the key combo. Python's behavior here is good UX. A key combo that does two different things depending on the current state of the program, and the program's state is changing right in front of you... that would suck.
- Freak_NL 5y agoUsing Ctrl + D to exit a shell and Ctrl + C to interrupt/break off the current line is a rather strong convention. Bash does this too, and many other REPL's and shells (Ruby's irb for one). A lot of technical folk who rely on this immediately notice when some shell doesn't do this (exiting instead of breaking of the current input line). I have this with Hbase's hbase shell. I've dropped out of that by accident dozens of times because Ctrl + C interrupts the whole shell.
- xrisk 5y agoFWIW, Ctrl+D is not "magic". It works because Ctrl+D is EOF. Applications that read input should expect that the input is done when they encounter EOF.
- tpxl 5y agoI like this feature because I'll use ctrl+C to cancel the current line I'm writing like I would in a terminal. Psql does the same thing, but I started using mysql recently and I keep getting booted out of the app because I want to cancel the current line ):
- chapium 5y agoI’d like phone number input boxes to handle the country id in a sensible way instead of accepting the input as the wrong number.
- geoduck14 5y ago>So they went to the effort of writing special case code to notice and handle this ... by giving instructions to the person, instead of the computer. Personally, I pretty passionate about NOT changing data that my tools receive. It takes a specific, documented situation for me to say "you give me X, and I make it Y". I am more comfortable with "your address, X, has been standardized to Y. Do you accept?".
- zbuf 5y agoI thought the same, and was surprised to find the problem here seems to be that there's no part of the HTML spec to set the allowable characters in a text input. So JavaScript to intercept keypresses or postprocess the string is risky at best and often poorly implemented. If it was in HTML it could be reliable, and have a unified behaviour when text is pasted in. For phone numbers there is a "tel" input, so the undesirable behaviour your experiencing may be in spite or because of it.
- Pxtl 5y agoAlso for spaces in credit card numbers, Canadian postal codes, and license plates.