Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Regex (lookahead) Confusion

by halley (Prior)
on Feb 06, 2004 at 14:49 UTC ( [id://327090]=note: print w/replies, xml ) Need Help??


in reply to Regex (lookahead) Confusion

Think of the User

I don't know if you're trying to balk at user-supplied information, or not, but just in case, I thought I'd rant for a minute.

I am thoroughly annoyed at any web form which gives me an error like the following:

Credit Card Numbers cannot contain spaces or dashes. Please enter your card number again in the proper format.

It makes me want to vote the rascals out, whenever an online tax form quibbles about dashes in government identifiers.

Your Social Security Number has three groups of digits, separated by dashes. To ensure your entry is correct, please re-enter your number in the format, ###-##-####.

I want to hang up on telephone systems when they whisper this nonsense in my ear:

You must first dial a One before your number. Please hang up, and dial your number again, beginning with a One, then your party's area code, then your party's number.
Or conversely,
You do not need to dial a One before your number. Please hang up, and dial your number again, beginning with your party's area code, then your party's number.
The security camera is the only thing stopping me from punching an ATM which requires me to enter the extra fraction zeros, when the machine is only equipped to dispense $20 bills.
Please enter the amout you wish to withdraw: $___.__ Your amount must be a multiple of $20.00.

If your system can accept the input as it is, then ACCEPT THE INPUT.

If your system can weed out the obviously extraneous information, then weed it out, and ACCEPT THE INPUT.

If your system can weed out the extraneous information, but it might not be what the user intended, then weed it out, and ACCEPT THE INPUT. In critical cases, confirm the input with an alternative display, and allow them to re-enter the information if it was interpreted incorrectly.

If your system can detect the difference between extraneous and possibly mistaken input, then show the user how your code interpreted their input, and ask for confirmation.

Days of the week? m,t, w-f You have entered: Monday Tuesday Wednesday Friday You may have entered something I don't recognize. Did I understand your schedule correctly? [ Yes ] No

Lastly, I have seen people try to associate 'H' for Thursday but never 'A' for Saturday. I don't think people will remember either one reliably, especially if they're not native English writers. Think of what your users want to see and specify, not what would fit in a single letter uniquely. These clever one-letter abbreviations should just be an implementation detail, not a user interaction plan.

Writing user interaction code is more labor-intensive on your part, and more demanding in terms of design consideration. However, you're going to foist any of these frustrations on each one of your users, every time they use it. In aggregate, that's a lot of frustration to dispense for just a few minutes of design time you save.

Be forgiving in what you accept, and strict in what you produce.

--
[ e d @ h a l l e y . c c ]

Replies are listed 'Best First'.
Re: Re: Regex (lookahead) Confusion
by diakonos (Hermit) on Feb 06, 2004 at 19:42 UTC
    Hi Ed! I agree with your comments on webusers. Rant On!

    However, I don't see a webuser entering in config information in a script to modify say a squid config file or a squidGuard config file which is unforgiving to say the least. I would love to be able to have the time to write a script to do just that. If I want to allow modifications to a system configuration file then I have to abide by the configuration rules of the application/service I am changing.

    For me to see a "smtwhfa" in a posting I immediately think about a script to control a configuration file. I could never see asking "any" user to come up with those abreviations for the weekdays. Having been around systems for a while the above mentioned letters are very familiar. I am sure the OP has considered allowing a user to enter things such as Monday, Tuesday, Wednesday etc. then converting it to m,t,w, or even mtw... But I am not going to assume that his request is for a web application.

    If I am going to update a config file that has the ability to accept "smtwhfa" (or whatever the last letter may be) I have to write the program to be able to accept that and maybe s-f, or Mon-Fri, or (Monday, Wednesday-Saturday), etc, etc, etc. This list of and combination of could go on forever.

    I am not too sure that this posting is for a web application for any "user" to be disturbed by the output as much as it is for an incredible regex problem that a lot of people (including myself) have encountered. As for rules to make sure that a user enters in information that you can easily process I don't see that as all bad. I use rules more for myself than I do the user. Many times I have been shocked as an end user entered something into an online form that without some sort of rules resulted in catastrophe. Rules can be a good thing as it allows us not to get caught with our pants down. You can't under estimate the user..

Re: Re: Regex (lookahead) Confusion
by ChrisR (Hermit) on Feb 06, 2004 at 19:50 UTC
    Thinking of the user is what prompted this post. OK, it was really about my lack of experience when it comes to lookahead assertions. However, I was thinking that the user may not be as familiar with the config files that will be managed by this application. Instead of forcing the user to know all the syntax rules for the config files, I check to make sure the syntax is correct. If it is not correct, I don't think I would want to take a guess at what the user meant. I'm not a mind reader. And if I simply accept the user input without being sure that the syntax and parameters are correct, there is a high probability that the program will fail due to the incorrect config information.

    Let's say you dial a phone number and enter a 1 then area code then the number. You then get the recorded response informing you that you don't have to dial a 1 first. My guess is that you are thinking the phone company should understand that you don't know how to use a telephone and are not willing to learn. Therefore they should just connect you to the number you dialed. OK. Perhaps you misdialed the area code and you really did have to dial a one. Well now the phone company has connected you but not to the number you dialed and not to the number you intended to dial. Now two people are frustrated (you and the person you just disturbed for no reason).

    I think it is very important that we understand most people will say the same thing in different ways. At the same time, we must understand that many software applications only understand the information if it is presented in a specific manner. I'm, sorry if this is offensive to you but I will never trust the user input implicitly and will always strive to be sure the data conforms to its pre-defined parameters.

      If the phone system knows I made an error, and knows the nature of the error, it should recover for my error. If it didn't know these things, then why did it explain my error so accurately?

      The structure of telephone systems is to understand how many more digits to expect from the user at any time. Area codes don't start with 0 or 1. This sets up the system to understand the next three digits. Some locales can't distinguish a new-style area code from a historically significant local prefix. The error messages are completely disregarding the user's goals, and instead forcing the user to learn the artificial local dialing hardware implementation. These vary from region to region, so a traveler currently has to cope with varying machine requirements, which have nothing to do with the goal of making a connection.

      I didn't say you HAD to recover from the user's errors by fixing it. Unlike the examples, it's not always possible. But you can give a more intelligent answer than "start over from scratch, complying with this rule you didn't know, you stupid user."

      Since you're writing the code that helps users accomplish a correct configuration, you know both what the machine expects, and what the user wants to express. You're the ONLY person in this chain who could provide a more intelligent interaction. You can make the computer provide tools to accomplish goals for a wider range of users.

      Don't expect the user to learn everything you did. If they mistype something, then help them accomplish their goals, rather than helping them learn the machine details you had to learn.

      --
      [ e d @ h a l l e y . c c ]

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://327090]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2024-04-19 11:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found