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

C# 表单验证客户端和服务器端,c#,javascript,regex,C#,Javascript,Regex,html表单的验证应该在两侧进行,同时正则表达式也应该在两侧进行 客户端:向用户显示消息而不询问服务器 服务器端:确认一切正常,并进行安全检查,以防js被禁用或有人试图破解表单 我的问题是:我经常看到服务器端正则表达式和客户端正则表达式之间有一些不同的错误 我在C#,你认为正则表达式应该在后端,服务器应该把自己的正则表达式放在客户端(Js)吗 我想避免这种情况: C# -> public const string AlphanumericField = @"[^A-Za-z0-9_]";

html表单的验证应该在两侧进行,同时正则表达式也应该在两侧进行

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

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

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

我在C#,你认为正则表达式应该在后端,服务器应该把自己的正则表达式放在客户端(Js)吗

我想避免这种情况:

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

我希望避免对同一事物进行两种声明。

对于RegularAre表达式,我总是使用asp.net中提供的
RegularExpressionValidator


检查:有关正则表达式验证程序的更多详细信息。

对于正则表达式,我始终使用asp.net中提供的
RegularExpressionValidator


检查:有关正则表达式验证程序的更多详细信息。

如果可能,在应用程序中,您可以为客户端验证执行AJAX调用,这将允许您将正则表达式放在一个地方,并且易于测试。每次需要检查时,服务器的性能可能会受到很小的影响,但在许多情况下,可维护性是值得的。

如果可能的话,在应用程序中,您可以调用AJAX进行客户端验证,这将允许您在一个地方使用正则表达式,并且易于测试。每次需要检查时,服务器可能会受到很小的性能影响,但在许多情况下,可维护性是值得的。

您可以要求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())
Dim cstext2作为新的StringBuilder()
cstext2.追加(“”)
附加(“var alpahField=\”“+AlphanumericField+“\”;”)
cstext2.Append(“脚本>”)
RegisterClientScriptBlock(csname2,cstext2.ToString())
您可以要求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())
Dim cstext2作为新的StringBuilder()
cstext2.追加(“”)
附加(“var alpahField=\”“+AlphanumericField+“\”;”)
cstext2.Append(“脚本>”)
RegisterClientScriptBlock(csname2,cstext2.ToString())

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

本机正则表达式:
^“[^”\\]*(\\.[^“\\]*)*”$

正则表达式文字中的Javascript正则表达式:
/^“[^”\\]*(\\.[^“\\]*)*”$/

逐字逐句文字字符串中的C#正则表达式
@“^”“[^”“\\]*(\\.[^”“\\]*)*”“$”

对于Javascript文字语法,唯一需要转义的元字符是正斜杠。对于存储在C#逐字逐句字符串中的正则表达式,唯一的元字符是双引号,它通过在一行中放置两个双引号“转义”

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


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

你可以使用完全相同的正则表达式(如正则表达式引擎所示),但是您需要分别声明它们,因为C#和JavaScript使用不同的转义方案。以一个正则表达式为例,它验证一个双引号字符串,该字符串可能包含任何用反斜杠转义的字符。以下是所需的本机正则表达式:

本机正则表达式:
^“[^”\\]*(\\.[^“\\]*)*”$

正则表达式文字中的Javascript正则表达式:
/^“[^”\\]*(\\.[^“\\]*)*”$/

逐字逐句文字字符串中的C#正则表达式
@“^”“[^”“\\]*(\\.[^”“\\]*)*”“$”

对于Javascript文字语法,唯一需要转义的元字符是正斜杠。对于存储在C#逐字逐句字符串中的正则表达式,唯一的元字符是双引号,它通过在一行中放置两个双引号“转义”

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


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

你是在使用webforms还是mvc?你是在使用webforms还是mvc?但你会同时拥有这两个声明吗?一个在C#中,一个在ValidationExpression属性中?但是您将同时拥有这两个声明?一个在C#中,一个在ValidationExpression属性中?