2009-10-17 37 views
13

我对表单验证非常肛门。因此,在为我的当前项目中的一个职位申请表(平台/语言在此情况下保持中立)创建“出生数据”(DOB)字段的验证程序时,我希望防止“不健康”输入。“出生日期”验证:您会走多远/多远?

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

验证错误消息是:您看起来工作太年轻。

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

如果DOB超过120年前,消息:“你不能那么老!!!”

如果DOB在未来,消息:“你一定是在开玩笑,你还没有出生!!!”

最后,我在没有最后2个的情况下部署,对于我的没有废话的客户来说太厚了。

我想知道你们多远/多少会去验证DOB字段的可用性(或幽默)?

同样,对于像“结婚日”的日期,等“毕业年” ...

PS:当我正要提出这个帖子,有标题的文本框下一个警告: “的你问的问题看起来很主观,很可能会被关闭。“ 手指交叉。

要添加: 我很惊讶有些人/大多数人不太关心验证。我在这里重复我的一个评论:

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

+3

@okw:我不主张尝试验证正确性(与有效性相反)的原因是因为您提出的原因相同:**网站所有者不知道正确的值** 。因此,你如何验证正确性?当然,根据您的应用程序,可能会有一些“安全下注”,但这完全取决于您的应用程序的功能。例如,有人购买了医疗软件和未出生的婴儿。此外,出生数百年或数千年的历史人物(在这种情况下,您可能也拥有国防部,但这是另一个问题。) – 2009-10-17 08:17:24

+0

@Matthew:同意。事实上,我只是想到了一些DOB可能超过200年或负面的情况。例如。 “你已故的祖父的出生日期”。或者,“未出生婴儿的期望DOB”因此,在不同环境下的DOB需要不同的验证器,从最简单的确保日期是有效的到日期范围。 – 2009-10-17 08:24:33

+0

是不是在询问某人的年龄对于求职申请是否违法?我会认为它在网络表格上与工作申请一样是非法的。 – jmucchiello 2009-10-17 08:48:28

回答

17

想想你填写表格的时间。你有多少次被挫败,因为一些“过于聪明”的程序员插入了一些“验证”,只是碰巧对你的情况不正确?我说,相信用户。想想看,随着时间的推移,无论如何,我认为人们在更早的年龄段活得更久并且上网。 :P

+9

我特别讨厌不接受加号或两个点相邻的电子邮件验证,或者......我只是想着它而充满了愤怒 – sbk 2009-10-17 09:14:21

+8

或者一个下拉框出生年份,因为有人认为这很容易。我们中的一些人不得不长时间下滑。 – 2010-01-15 03:32:54

2

有效期:检查
日期不是在未来的:也许(我处理医疗应用,所以我想你可能会被治疗胎儿)
日期年龄不超过120岁:可能

我不是过度设计这些东西的一个忠实粉丝,特别是如果用户的错误是相对无害的并且可以容易地发现并修复。无论如何,这就是我的方法。

+0

我同意。验证有效数据,而不是正确的数据。你无法确定你的有效数据是正确的还是不正确的,并且你最终会被误报的次数超过假的负数。 – 2009-10-17 07:55:19

+0

@Deeksy:如果用户错误地输入了日期(非常明显),这是验证器捕获它的目的之一。当数据进入系统时,网站所有者只知道输入错误,他/她在不询问用户的情况下不会知道实际值。 – 2009-10-17 07:55:50

+0

未出生的婴儿没有出生日期。他们可能有一个到期日,但这是一个不同的事情! – 2009-10-19 01:27:04

0

是一个完美主义者,我会去这里为150:d

低的机会,人们已通过120,和谁知道什么应该在未来三十年发生的情况:d

我不要觉得它那么重要,但是..

12

不要忘记,你也可以警告用户不可能的值。在大多数情况下,错字比故意尴尬的可能性更大。

因此,对于你的应用程序,也许是这样的:

  • 年龄<分钟。申请人的年龄 - 错误
  • 年龄>常见的退休年龄 - 警告
  • 年龄>预期寿命 - 错误
+0

@Colin:好主意! – 2009-10-17 08:01:42

+1

最好在没有页面加载的情况下提醒他们(即刻用javascript) – Adam 2010-03-08 00:56:32

+0

+1但是...错误:您应该死亡。 – doc 2012-05-10 13:21:27

2

有效期:

我会去检查这个日期是否存在的延伸或不。即闰年二月二十九日等

日期在将来:

我们平时检查年龄(今年 - 给出DOB),并必须至少一定年龄进行注册。

大于120岁的日期:

我不会检查。 200年将是一个更安全的限制? (如果一个121岁的男人想要使用电脑*chuckles*

+0

提到闰年问题+1! – Vicky 2009-10-26 10:51:44

1

幽默是一个非常主观的东西,而且很专注于项目,所以在这些方面有点难以回答。话虽如此,如果应用程序支持正式的流程,例如申请工作,我可能会在谨慎的方面犯错,并保持其非常实际。

至于验证,我相信您在这里所做的努力应该与无效数据在UI中的影响成正比。回到工作申请表,我想在某个时候会有一个人的审查过程,所以无论数据是有意或无意地输入错误,无效数据的风险都很小。

如果您担心“浮躁”或机器人驱动的输入,然后使用验证码。说了这么多,我认为你用你使用过的验证规则是很安全的。

0

这一切都取决于应用程序。用于订单处理的业务线(LOB)应用程序与跟踪历史或未来数据非常不同。

可以认为它需要是有效的日期,但考虑有多个日历(例如,月份数可以是13,年可以超过5000)。

0

验证整数并有帮助;我认为别的什么:一个虐待/大哥哥/过度发明的系统是一个坏主意。

人们应该被允许躺在这些形式,如果他们愿意;这不是一个合法的事情,它是一个网站。

不要这么认真。

+1

我认为这完全取决于应用程序/网站 - 当然,谎言如果它是一次性的东西。如果它是内联网上的公司应用程序,那么该日期对于应用程序的其他部分而言很重要? – richsage 2009-10-17 10:49:21

+0

如果他们希望这样做,他们仍然有权利说谎...我不是说他们应该这样做,但他们必须被允许。 – Rook 2009-10-19 19:44:27

6

我认为验证非常重要,但不一定在您的情况。这并不是说你的情况微不足道,我只是有我自己的日期导向选择。

具体而言,我的顾虑总是在保持事物的逻辑顺序。如果有人说他们出生于1802年,那很好(我),我只想让他们的毕业日期大于出生日期。但是,如果用户选择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>"; 
+0

@安东尼:措辞很好。从全新的角度欣赏您的洞察力。 – 2009-10-17 08:49:49

4

如果你这样做是任何东西专业 - 就像一个工作应用 - 我可能不会使用“ !”在消息中传递给用户。看看你喜欢的任何一个出色的网站,你不会找到它常用的。

+2

http://www.yahoo.com;) – nickf 2009-10-17 08:56:52

1

嗯,我不是一个程序员(更多的学士学位),虽然我试图获得一些发展技能,因为我认为这可能会帮助我成为一个更好的学士学位。我做了一些VBA(不要笑)。

反正这里想着这是我的两分钱

1)删除的幽默。你现在对你有什么好笑的不会是别人。此外,二三十岁以后有趣的事情在25岁或30岁以后就不好笑 - 即使你正在和一群焦躁的人群打交道,它也只会让人厌烦! 2)我接下来的想法是,除非你能明确地验证某些东西是明显错误的,你不想让别人输入一个值< 0,那么你应该考虑通过对话来警告而不是预防,或者操作系统的标准是什么。

嘿我知道什么,在一个星期我就已经改变了我的心(我是一个业务分析师),将开发商,要求即时repsonses; - >

9

验证与正确性
输入验证的要点是确保所有元素都在进一步处理允许和预期的范围内 - 也就是说,如果您的数据库保证 DB中的所有申请人年满18周岁,请验证该内容。如果您的数据库也接受申请实习的学校孩子,请不要。

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

假信任
试想一下,如果你告诉一个用户说:“你在输入排除不可能DOBS”发生了什么。她可能会告诉她的同事,DOB“已经验证”。他最终得出的结论是申请人90岁,如果是假的,你会拒绝。

所有进一步处理 - 通过人工或计算机 - 必须仍然假设DOB可能不正确 - 仅仅是由于错字。你正试图创造一个你实际上无法做到的保证。许多用户比其他人更信任他们每天使用的计算机,而您正试图强化这种信任 - 这是IMO的谬误。

嬗变
许多应用活更长的时间比原来想象的实施者,而且相当部分将用于超出了他最疯狂的梦想的目的。建立在既不简化实际处理又不简化运营商工作的人为限制实际上并没有帮助。

(这使我很可能成为你的客户的严肃类 - 但THST是我的方式是“肛门有关验证”:知道何时停止:))

+0

@peterchen:感谢您的深思熟虑的回应。我描述的例子很好,就是一个例子。那么我同意我们不能说出一个DOB是否确实是真的,我们可以根据上下文来判断它是否确实不可能。一个人可能确实忘记了自己的生日,但仍然能够提交有效但错误的DOB的表格。无论如何,我可以告诉你,在你想验证的广泛程度方面,你不会走得太远。 :) – 2009-10-17 11:00:23

1

让我们只用两个数字的年份到处。 1999年之后没有人会使用我们的软件!

+0

你是否建议在某些时候人们会活到200岁? – Adam 2010-03-08 01:01:10

5

当问生者的出生日期时,只会拒绝绝对错误的值。未来的任何生日都是错误的。我会画一条线,并说1880年之前的任何出生日期肯定是错误的。其他任何东西都是有效的出生日期。

因此,任何未通过上述测试的出生日期都会被拒绝,并在字段级别显示一条消息,如“此日期将来/过去太远了,请输入您的出生日期。”

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

这个想法是从单独的个别字段验证。将它们混合会产生复杂的规则。分离意味着您可以重新使用该领域的规则(例如“活人的DOB必须介于1/1880到今天之间”)。

0

只要让用户选择一个日期。用户应该控制..不是系统/开发人员。关于DOB,您应该避免的唯一日期是未来,因为这是不正确的(即通过设计防止错误)。您提供的日期选择器应该处理任何日期格式问题。

绝对不会抛出任何厚颜无耻的例外/消息。您的消息应该有助于用户识别从错误中恢复的&。

希望有所帮助。

2

我想你应该在设计验证时考虑你的实际需求。是的,如果该字段是一个日期字段(也许更重要的是,如果它存储了一个日期,但比恒星dba少一点使其成为varchar),请确保仅提交有效的日期。这很关键。日期无效导致查询数据时出现各种问题。如果是过去必须发生的日期,请将日期范围限制在当前日期或更早的日期。

之后,与您的客户想要的。如果他们想为你付出消除年龄小于工作年龄的人,他们会告诉你。不遵守年龄上限可能会让您陷入年龄歧视的法律困境。客户可能不希望你这样做。

+0

完全同意,特别是重新:法律要求。例如,银行对他们必须实施的年龄验证有法规和法律要求。做一个专业的工作,找出需求是什么,然后实施它们。 – razlebe 2009-10-19 20:51:19

0

下面是在验证DOB,你可以做的检查:

计算从DOB年龄和执行下列检查

AGE> XX [XX是应用所需的最小年龄]

AGE < XX {应该抛出一条消息提的是,你是不是老得足以}

年龄= XX

如果年龄没有上限,然后我们就可以把它作为退休年龄其他与上限验证在接下来的两个检查

AGE <退休年龄

年龄>退休年龄{应该抛出一个消息mentiong你太旧应用}

年龄=退休年龄

DOB是一个有效的日期(通过给予有效日期)

DOB是无效的 -

Enter 0 in either of day/month/Year 

Enter some negative Value 

Enter some invalid date e.g. 30th feb or 32 Jan etc 

Enter valid date with different separators (although the date is a valid one but due to different separators it will become an invalid one) 

输入日期以不同的格式,如通过给予DD/MM/YYYY,DD/MM/YY,DD/MON/YYYY等

输入将来的某一天(无效这里你的目的是什么不同)