限制用户按键输入是一个好习惯,如果不是,验证输入的最佳方法是什么?

时间:2014-03-02 22:13:50

标签: vb.net visual-studio-2012

我目前是一名完成Visual Basic课程的学生,我的教授坚持认为,如果用户输入需要整数,那么我应该将所有按键字符限制为仅数字/退格/删除。与字母字符串相同:他希望我仅根据程序的要求允许特定字符,但是使用按键事件来执行此操作。

我正在尝试将“名字”和“姓氏”字段限制为仅允许字母和退格键,并且当我遇到一个提到这个问题的主题时,我正在研究这样做的最佳方法。是一个非常糟糕的主意。响应表明,验证应该在输入提交时/之后处理,但不能限制用户在输入时输入他们想要的内容的能力,即使它是错误的(我很抱歉,我会链接到目前为止,但我今天已经倾注了很多博客/主题/等等,现在它已经被埋葬并丢失了。

无论如何,我认为这是有道理的,虽然我从他的推理中抓住的仅仅是“它真的让用户感到沮丧而且没有必要”。尽管如此,过去几个小时我一直在寻找通过除了按键或文本更改事件之外的方法来验证输入的最佳方法,并且确实没有任何运气。

我想我的问题是,通过kepress / handling = true / etc限制用户输入通常是一种不好的做法?如果是这样,为什么?在用户输入验证方面,我应该专注于获得更好的习惯吗?如果是这样,确保用户提交正确类型信息的最佳方法是什么?

我只是意识到,我经常根据教科书或特定教师所说的习惯养成习惯,只是意识到这是不能提供最佳解决方案或过时的东西等等。我真的想确保我开始学习最好的编码实践,而不是学习坏习惯并融入其中。也许我正在深入研究一些非常简单的事情,但我希望从那些比我更有经验的人那里得到一些意见。

非常感谢你的时间!

3 个答案:

答案 0 :(得分:2)

TL; DR - 如果这是唯一的数据格式验证,这是不好的做法。如果将结果与后端的数据验证相结合,则对输入进行表单检查很有用。

  

我想我的问题是,通过kepress / handling = true / etc限制用户输入通常是一种不好的做法?如果是这样,为什么?

如果它是第一道也是唯一的防线,这是不好的做法。这样做的原因是说你正在建造的这个系统是为一家公司而存在的,并且会存在一段时间。目前,您的表单是唯一传递信息的表单,它正确地将输入数据限制为某种格式,并且有一段时间,系统是好的。

现在,说它已经有一段时间了,你并没有真正记得这个系统(或者甚至继续前进,新员工正在使用这个系统)。公司需要通过其他方式(比如移动设备)向系统发送信息,因此他们编写了一个将用户输入发送到系统的应用程序。不幸的是,他们不知道格式,系统以一些新的和不可预见的方式打破。到目前为止,系统已经发展得如此之大,没有人真正知道从哪里开始,调试这个问题会让每个人花费很多钱和头痛,每次有人想要添加到系统中。

基本上,这个问题(一直发生在字面上)可以通过良好的文档和系统组件之间的正式通信方法的组合来解决,包括在每个接口都设置一道防线。

  

在用户输入验证方面,我应该专注于获得更好的习惯吗?如果是这样,确保用户提交正确类型信息的最佳方法是什么?

当然!最好的方法是练习建立这样的系统(建立一些你喜欢的有趣的东西),一种方法是想象用户是恶意的并且想破坏你的系统因为教授会给他钱,如果可以的话。找到保护系统免受恶意(或更可能是无知)用户的方法。

编辑: 我没有深入研究其中一个最大的原因:通过发送您自己的POST消息以及您想要的任何数据,可以完全绕过带有表单验证的网站。这意味着Web表单验证只是一种便利措施,而不是安全措施。

答案 1 :(得分:1)

我也是VB.NET的新手,所以毫无疑问有人会有更好的解决方案。这是我的例子:

    Imports System.Text.RegularExpressions

    Public Class Form1

        Private Sub btnValidate_Click(sender As Object, e As EventArgs) Handles btnValidate.Click
            If Not Regex.Match(txtLettersOnly.Text, "^[a-z]*$", RegexOptions.IgnoreCase).Success Then
                MessageBox.Show("Error! Enter alpha text only!", "Validation")
            Else
                MessageBox.Show("Success!", "Validation")
            End If
        End Sub

    End Class

这可以保留为单击事件,也可以移动到Sub过程。

    Imports System.Text.RegularExpressions

    Public Class Form1

        Private Sub btnValidate_Click(sender As Object, e As EventArgs) Handles         btnValidate.Click
            validateTextBox()
        End Sub

        Private Sub validateTextBox()
            If Not Regex.Match(txtLettersOnly.Text, "^[a-z]*$", RegexOptions.IgnoreCase).Success         Then
                MessageBox.Show("Error! Enter alpha text only!", "Validation")
            Else
                MessageBox.Show("Success!", "Validation")
            End If
        End Sub

    End Class

答案 2 :(得分:0)

不,永远不会限制用户输入。如果需要,在字段旁边放置一个X标记,用户可以悬停以查看错误消息(如果有错误)。无论您如何处理,服务器端表单验证都应在提交时进行。