"出生日期"验证:你会走多远/多远?

o.k*_*k.w 14 validation usability date date-of-birth

关于表单验证,我很肛门.因此,在我当前的一个工作申请表项目(平台/语言在这种情况下是中立的)中为"出生数据"(DOB)字段创建验证器时,我想要一些东西来防止"朋克"输入.

我使用了日期选择器,并将最长日期限制为从当天起的XX年.XX对于这种情况有意义,因为任何年轻人都不应该申请这份工作.

验证错误消息是:您似乎太年轻了.

然后我开始冒险.怎么样?

如果DOB超过120年前,请留言:"你不能那么老!!!"

如果将来有DOB,请留言:"你一定是在开玩笑,你还没出生!"

最后,我部署了没有最后2,对我的严肃客户来说太厚颜无耻了.

我想知道你们有多远/多少去验证DOB字段以获得良好的可用性(或幽默感)?

同样的日期,如"结婚日期","毕业年份"等...

PS:当我即将提交这篇文章时,标题文本框下面有一个警告:"你问的问题似乎是主观的,可能会被关闭." 手指交叉.

补充一点: 我很惊讶一些/大多数人都不太关心验证.我在这里重复一下我的评论:

如果用户错误地输入了日期(非常明显),无论是出于意图还是出错; 这是验证者捕捉它的目的之一.当数据进入系统时,站点所有者只知道输入错误,他/她在不询问用户的情况下不知道实际值.如果这个领域非常重要,那将不是一个漂亮的场景.

asv*_*kau 18

想想你填写表格的时间.有多少次你感到沮丧,因为一些"过于聪明"的程序员插入了一些"验证",恰好是你的情况不正确?我说,相信用户.快来想想吧,随着时间的推移,无论如何,人们认为人们的寿命更长,并且在较早的时候上网.:P

  • 我特别讨厌那些不接受加号或两个点相邻的电子邮件验证或......我只是想着它才充满愤怒 (9认同)
  • 或者是出生年份的下拉框,因为有人认为这更容易.我们中的一些人必须向下滚动一个令人沮丧的长路. (8认同)

Col*_*ard 12

不要忘记你也可以警告用户不太可能的值.在大多数情况下,拼写错误比故意尴尬更可能.

所以对于你的应用程序,可能是这样的:

  • 年龄<分钟 申请人年龄 - 错误
  • 年龄>普通退休年龄 - 警告
  • 年龄>预期寿命 - 错误


pet*_*hen 10

验证与正确性
输入验证的要点是确保所有元素都在允许范围内并通过进一步处理预期 - 即如果您的数据库保证数据库中的所有申请人都是18岁或更长,请验证.如果您的数据库也接受学校的孩子申请实习,请不要.

一切不寻常只是一个警告.是的,120年的价值是疯狂的,你应该警告用户,并可能将此记录标记为可疑/审查.但是,拒绝它是没有意义的(除非你有一个商业规则,例如所有申请人都不到70岁).

虚假信任
想象一下,如果你告诉一个用户"你排除输入端不太可能的DOB"会发生什么.她可能会告诉她的同事DOB已"已经过验证".他最终得到了一个没有根据的信任,即申请人是90岁,如果是假的,你会拒绝它.

所有进一步的处理 - 通过人工或计算机 - 必须仍然认为DOB可能是错误的 - 只是因为拼写错误.您正在尝试创建一个您无法实际制作的保证.许多用户相信他们每天使用的计算机比陌生人更多,你正在努力加强这种信任 - 这是IMO的谬论.

嬗变
许多应用程序的寿命比原始实现者想象的要长得多,并且相当一些应用程序将用于超出他最疯狂梦想的目的.在人工限制中建立既不简化实际处理也不简化操作员的工作实际上没有帮助.

(这让我可能进入你客户的严肃的类别 - 但是我的方式是"关于验证的肛门":知道什么时候停止:))


Ant*_*ony 7

我认为验证非常重要,但不一定适合您的情况.这并不是说你的情况微不足道,我只是有自己的日期导向的尼特来挑选.

具体来说,我的担忧总是保持逻辑顺序.如果有人说他们出生于1802年,那很好(sorta),我只想让他们的毕业日期大于出生日期.但是,当涉及到时间(如小时和分钟)时,你会遇到一些小问题,例如,如果用户选择8:30作为开始时间,然后选择9:15作为结束时间,但后来意识到结束时间是8:45.他们决定将9改为8,意图将分钟改为:45.但我的验证脚本太忙了,说"嘿等等!8:15是在8:30之前,好好试试!" 但我不能冒险让他们出错,等等.

特别是对于你的情况,我会倾向于道德正确.因为有人指出,有人可能会进入家族历史(1600年代的DOB)或未来的购买(今天之后的日期),因此一般来说日期没有实际限制.但是你的场景有限,即:

如果年龄低于法定工作年龄(美国大部分地区为16岁),甚至不提供高于该年份的任何选项(如果您使用下拉菜单).

如果年龄超出合理的工作年龄(可能是一个敏感的主题),根据退休年龄提供最高价值,只需在该年前加上">".如果有人是75岁并申请管理员级别的工作,他们会更加高兴的是,你做的事情很简单,而不是被冒犯,因为你没有列出他们的出生年份.如果有的话,他们会留下深刻印象(我认为)你走这条路而不是一无所有,这意味着他们不应该浪费时间.

最后,您可以通过简单的下拉菜单轻松编写脚本(例如在PHP中):

$currentYear = date('Y');

    echo "<select name=\"YearOfBirth\">";

for($i = 16; $i <= 64; $i++) {
    $optionYear = $currentYear - $i;
    echo "<option value=\"$optionYear\">$optionYear</option>";
    }

    $greaterYear = $currentYear - 65;
    echo "<option value=\"&gt;$greaterYear\">&gt;$greaterYear</option>";

    echo "</select>";
Run Code Online (Sandbox Code Playgroud)


Ben*_*wee 5

在向生活中的人们询问他们的出生日期时,只能拒绝绝对错误的价值观.未来的任何生日都是错的.而且我会划清界线并说在1880年之前的任何生日都是错误的.其他任何东西都是有效的生日.

因此,任何未通过上述测试的生日都将被拒绝,并在现场级别显示一条消息,例如"此日期在将来/过去太远.请输入您的出生日期."

任何其他生日有效(可能用户真的是11岁,或108).但是整体形式可能会被业务规则拒绝.例如,"您必须年满18岁才能申请."

我们的想法是将单个字段验证与表单验证分开.将它们混合会产生复杂的规则.分离意味着您可以在其他环境中重复使用该字段的规则(例如,"活人的DOB必须在1880年1月1日至今"之间).