【问题标题】:How to catch opening double quotes and closing double qoutes with a regular expression?如何使用正则表达式捕获打开双引号和关闭双引号?
【发布时间】:2013-09-03 10:50:37
【问题描述】:

对于用 vb.net 编写的 asp.net 应用程序中的几个文本框,我几乎没有正则表达式验证器。

Public Const NAME_REGEX As String = "[^<>""]*$"

如果大多数用户使用键盘输入,它可以正常工作,但是,如果他们从 MS Word 复制名称,则正则表达式无法检测到这些。例如,

John “Smith”

我怎样才能拒绝用户输入这样的双引号?

【问题讨论】:

    标签: asp.net regex vb.net double-quotes


    【解决方案1】:

    您可以执行自动替换(在TextBoxesTextChanged Event 中,如下所示;或者在处理给定的String 之前)。例如:

    Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
         TextBox1.Text = TextBox1.Text.Replace(ChrW(8220), "")
         TextBox1.Text = TextBox1.Text.Replace(ChrW(8221), "")
         TextBox1.Text = TextBox1.Text.Replace("""", "")
         If (TextBox1.TextLength > 0) Then
             TextBox1.Select(TextBox1.TextLength, 1)
         End If
    End Sub
    

    此代码不允许用户编写"。代码如此复杂的原因是处理“弯曲”双引号(如示例代码中的双引号)并不简单:VB.NET 在大多数情况下将它们视为普通双引号,但这不会立即发生(例如,在处理上面代码中的输入时),因此您必须考虑所有的可能性。在这里你有一个interested link on this matter

    【讨论】:

    • 很好的答案。不过,在这种情况下,我不建议您进行替换,因为您可能只需将其添加到正则表达式(例如 "[^&lt;&gt;""" &amp; ChrW(8220) &amp; ChrW(8221) &amp; "]*$")。
    • @StevenDoggart 谢谢。你说的对。另一方面,我不完全确定 OP 到底想要什么。也许他也想出于其他原因限制输入的引号。无论如何,这个答案和您的评论都足以解决OP的问题:)
    • 感谢@varocarbas 的精彩解释.. 我最终使用了史蒂夫的答案,因为它的改变较少并且可以完成工作。谢谢。
    • @LaurenceNyein Steven 的效率更高,如果这是你想要的;如前所述,我不确定您的确切期望,这就是我决定写这个答案的原因。
    • 嗨@varocarbas ..我非常感谢您的回答和解释..如果您不写,我什么都不会理解。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多