前几天我去了我的银行网站并输入了我的帐号和一个尾随空格。弹出一条错误消息,上面写着“帐号必须仅由数值组成”。我心想,“说真的?!你不能为我剥去空间吗?”如果我不是一个电脑爱好者,我甚至可能会想,“什么? 只有那里的数字!” (无法看到空间)。
另一方面,Ubuntu附带的计算器快乐地接受空格和逗号,但奇怪的是不喜欢尾随点(没有任何后续数字)。
所以,这引出了一个问题。 Web表单究竟应该是多么宽容?我不认为修剪空白太多了,但其他整数字段呢?
我很容易删除所有非数字字符,这将是非常宽容的,但是如果用户犯了一个影响输入的实际错误并且应该被捕获,那么现在我已经把它剥掉了?
电话号码(格式多种多样),邮政编码,邮政编码,信用卡号码,用户名,电子邮件,网址等等(我应该假设http吗?我正在使用.com怎么样?) ?)?
你在哪里划线?
答案 0 :(得分:7)
对于像银行这样重要的事情,我不介意抱怨我的意见,特别是如果另一种选择错误地将一大笔钱转移到某个陌生人的账户而不是我妻子的账户(因为缺少或不正确的数字)例子)。
一个典型的例子是我的银行之一不允许货币价值,除非它们最后有“.99”(其中9可以是任何数字)。我所做的绝大多数事情都是为了精确的金额而且总是输入500.00而不是500美元有点烦人。
但是我会更高兴的是,我第一次避免意外支付5072美元而不是50.72美元因为我忘记了小数点。实际上,这是不太可能的,因为它也要求确认,我很擅长控制我的钱: - )
话虽如此,我试图遵循的一般规则是“在你接受的东西中要宽容,在你所生产的东西上要严格”。
这允许使用我的输出的其他软件期望有限的可能性(使他们的生活更轻松)。但它使我的软件更有用,如果它可以处理简单的misteaks。
答案 1 :(得分:4)
您在计算机猜测输入正确的位置绘制线条。
例如,我写过的许可证密钥输入框一次接受空格和破折号以及大写和小写,即使内部的键没有所说的空格,破折号也都是大写的。我能做到这一点,因为我知道没有任何键实际上有空格或破折号。
关于网址的示例是另一个很好的例子。我注意到现代浏览器(我正在使用Chrome),当在地址栏中键入类似'flowers'的内容时,它知道它应该搜索它,因为它不是有效的URL。相反,我键入'st'它会自动更正(或自动建议)'stackoverflow.com',因为它是书签。
一个写得很好的输入系统会抱怨,否则会被迫猜测正确的输入应该是什么。
答案 2 :(得分:2)
数字输入:
剥离非数字对我来说似乎是合理的,但问题是十进制表示法冲突。某些地区希望,
(逗号)表示小数点分隔符,而其他地区则使用.
(句点)。除非输入可能在其他基础上,否则我只假设基数10.如果假设非基数10输入(例如,颜色输入的基数为16)是合理的,那么我将使用标准约定来表示基数:前导0表示基数为8,前导0x表示基数为16。
字符串输入:
这变得更加复杂。它主要取决于输入实际意味着什么。用户名应该排除会导致问题的字符,但“导致问题”的含义会因应用程序和系统本身的使用而异。 URL具有合格的具体定义,但该定义相当广泛。幸运的是,许多语言都带有识别URL的工具,而无需编写自己的解析代码(语言是否完美无缺)是另一个问题。
最后,它确实是个案的基础。我确实喜欢paxadiablo的一般规则:尽可能多地接受,只输出你必须的东西。
答案 3 :(得分:1)
这完全取决于数据的使用方式。
如果输入是货币金额,例如对于交易,那么输入的变量应该被标准化为一组标准。
如果只是一个电话号码的情况,那么存储的数据不太可能提供任何功能使用,因此您可以更宽容。
强制使用正确的格式使显示效果更好,但你必须平衡用户的刺激和微观效益。
开始收集数据后,您可以浏览数据,看看出现了哪种模式,并且可以自动去除输入的格式。
答案 4 :(得分:1)
你在哪里划线?
当接受“无效”数据的后果超过不接受它的刺激时。
他们应该允许+/-标志吗?
如果负值有效,那么他们当然应该。
如果没有,那么不要只是默默地删除减号,因为它完全改变了数据的含义。剥离优势不是问题。
如果每4个数字之间有[千位分隔符]而不是每3个数字怎么办?
在使用三位数分组的国家/地区,“1,0000”可以假设为拼写错误。但这是“10,000”还是“1000”的错字?我不敢猜,因为一个错误的猜测可能会花费用户9,000美元。
十六进制和八进制怎么样? 表示?
除非您正在运行unicode.org的搜索功能,否则我无法想象为什么有人会在网络表单中使用十六进制。
“01234”几乎肯定是1234而不是668。
像信用卡号码那样的事情
请允许信用卡号码中的空格或连字符。当我必须键入一个无限制的16位数时,这真的很烦人。
答案 5 :(得分:0)
我认为你的反应有点过分了。如果该领域中有任何不应该存在的东西,请将其剥离。否则尝试将输入强制为您想要的任何格式,如果它不适合,请拒绝它。
答案 6 :(得分:0)
我会说“接受任何事情但只处理有效数据”。
期望您的用户表现得像电脑菜鸟。使用正则表达式和其他验证器验证输入数据。
搜索网址,电子邮件和内容的标准正则表达式。
投入一个像这样的常规exp“/(?:( [a-zA-Z0-9] [\ s,] +))([a-zA-Z0-9] +)$ /“用于逗号或空格分隔值。通过微调,这个exp将适用于任意数量的逗号分隔值。
答案 7 :(得分:0)
作为用户使我感到烦恼的是信用卡号码,通常这些显示为4位数字的组,空格将它们分开,但奇数网络表单只接受一个没有空格的数字字符串,并且没有迹象表明这是格式化它的寻求。同样地,电话号码,人们通常使用空间来提高清晰度,webforms有时会接受空格,有时则不会。