正则表达式 – 实用的用户验证(敏感性和特异性)?
当我第一次学习如何使用正则表达式时,我们被教导如何解析电话号码(显然总是5位数,可选空格和另外6位数),电子邮件地址(显然总是字母数字,然后是单个’@’),然后是字母数字后跟一个’.’和三个字母),我们应该总是这样做来验证用户输入的数据.
当然,正如我已经开发出来的那样,我已经了解了基本方法有多愚蠢,但是我看的越多,我对这个概念的质疑就越多,通过正则表达式对电子邮件地址等最开放的仔细正确验证最终会成为数百甚至数千个字符长,以便接受所有合法案件并正确拒绝非法的案件.更糟糕的是,所有这些努力对于实际有效性绝对没有任何作用,用户可能不小心添加了“a”,或者可能根本不使用该电子邮件地址,甚至使用其他人的地址,或者甚至可能使用”被不正当地标记的符号. 然而,与此同时,我遇到的每个网站仍然会进行这种技术检查,阻止我在电子邮件地址或名称中添加更多不起眼的字符,或者反对某人拥有多于或少于一个标题的想法,然后是一个名字和一个姓氏,都是纯粹用拉丁字符制作的,但没有任何形式的检查,这是我的真名. 这有益处吗?一旦处理了注入攻击(应该通过对输入进行消毒以外的其他方法),还有其他指向这些检查吗? 或者另一方面,实际上是否有一种确定的方法可以实际验证用户详细信息,而不是以任何方式在上下文中“使用”它们并查看它是否会崩溃?
当然.知道您的数据有效非常重要.例如,对于电子邮件地址,向尚未验证的地址发送电子邮件至少会导致退回.足够的反弹和您的邮件主机可能阻止您发送垃圾邮件.如果您的应用尝试向他们发送短信,则不验证电话号码可能会导致不必要的费用.这个清单一直在继续.
是的,但正则表达式通常是验证数据的不好方法.如果电话号码应该是“5位数,一个空格,那么6位数”,那么如果我输入“5位数2个空格然后6位数”或“5位数字短划线然后6位数”或“11位数”,则检查将失败数字”.使用常识,并期望用户提供任何疯狂的格式.知道绝对最低要求是什么.例如,如果您需要总共11个数字,那么首先删除不是数字的所有内容.然后格式化无关紧要. 另外,阅读RFC.我无法计算我的电子邮件地址被拒绝的次数,因为它有一个加号.那些大型技术型公司与程序员应该更好地了解的数量相当令人失望. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 编写高质量代码改善C#程序的157个建议:第17个建议之多数情
- JSONObject转换JSON之将Date转换为指定格式(转)
- abap – SAP R / 3从IDoc XML文件中删除尾随空格
- 使用 Simple 简化 XML 序列化
- 正则表达式基本应用
- iphone – 带有’CGPDFDocumentRef == NULL’的NSInternalI
- 用 Swift、Foursquare API 和 Realm 創建一個咖啡店 App
- Ajax请求响应数据格式的设计
- swift – 使用计时器定期更新NSTableCellView内的文本字段
- react-native – 从左到右的窗口动画与反应导航?