表单验证客户端和服务器端

本文关键字:服务器端 客户端 验证 表单 | 更新日期: 2023-09-27 18:04:13

对html表单的验证应该在两侧进行,也可以在两侧进行regex。

客户端:向用户显示消息而不需要询问服务器

服务器端:确认一切正常并检查安全,以防js被禁用或有人试图破解表单

我的问题是:我经常看到服务器端正则表达式和客户端正则表达式之间的一些错误是不一样的。

我在c#,你认为Regex应该在后端和服务器应该把他自己的Regex在客户端(Js)?

我想避免这个:

C# -> public const string AlphanumericField = @"[^A-Za-z0-9_]";
JS -> var alpahField = "[^A-Za-z_-]";

表单验证客户端和服务器端

对于正则表达式,我总是使用asp.net中可用的RegularExpressionValidator

查看:http://msdn.microsoft.com/en-us/library/eahwtc9e.aspx了解更多关于正则表达式验证器的详细信息

如果可能的话,您可以在您的应用程序中为您的客户端验证做一个AJAX调用,这将允许您在一个地方拥有该RegEx,并且易于测试。每次需要检查时,您可能会对服务器的性能造成很小的影响,但在许多情况下,可维护性是值得的。

你可以要求c#使用注册客户端脚本块为javascript声明这个变量

Dim cstext2 As New StringBuilder()
            cstext2.Append("<script type=""text/javascript"">")
            cstext2.Append("var alpahField = '"" + AlphanumericField  +"'";")
            cstext2.Append("script>")
            RegisterClientScriptBlock(csname2, cstext2.ToString())

您可以在客户端和服务器端使用完全相同的regex(由regex引擎看到),但您需要分别声明它们,因为c#和JavaScript使用不同的转义方案。以验证双引号字符串的regex为例,该字符串可能包含任何用反斜杠转义的字符。以下是所需的本地正则表达式:


本地正则表达式:^"[^"'']*(''.[^"'']*)*"$

Javascript regex in regex literal:
/^"[^"'']*(''.[^"'']*)*"$/

c# regex
@"^""[^""'']*(''.[^""'']*)*""$"

使用Javascript文字语法,唯一的元字符(需要转义)是正斜杠。对于存储在c#逐字面值字符串中的regex,唯一的元字符是双引号,通过在一行中放置两个双引号来"转义"。

RegexBuddy解决方案

实现目标(为每个验证规则只维护一个主正则表达式)的一个好方法是使用RegexBuddy (RB)构建所有本地正则表达式。您可以将所有经过完全测试和调试的验证正则表达式(以及每个正则表达式的适当测试数据)存储在单个regexbuddy库文件中。然后简单地使用RB的内置导出功能为代码生成(正确转义的)c#和Javascript正则表达式片段。

如果你真的想要制作准确高效的正则表达式,你应该使用这个工具来测试每个正则表达式是否能正确地工作在所有的边缘情况下(匹配和不匹配)。