【问题标题】:When's an Apostrophe not an Apostrophe - validation .Net / Javascript什么时候撇号不是撇号-验证.Net / Javascript
【发布时间】:2010-11-30 01:25:23
【问题描述】:

我有一个用于 .NET 2.0 中电子邮件的正则表达式验证器,它使用客户端验证 (javascript)。

当前表达式为 "\w+([-+.']\w+)@\w+([-.]\w+).\w+([-.]\ w+)" 这可以满足我的需要(或者我认为是这样)。

但是,当我将电子邮件地址从 Outlook 复制/粘贴到表单文本字段中时,我遇到了撇号问题

Chris.O'Brian@somerandomdomain.com

您可以看到撇号与我只是在文本框中输入时得到的字符不同

' vs ' - 但都是撇号

好吧,我想,让我们把这个字符添加到验证字符串中,这样我就得到了

"\w+([-+.'']\w+)@\w+([-.]\w+).\w+([-.]\w+)"

我将“特殊”撇号复制粘贴到验证表达式中,然后键入电子邮件并使用相同的剪贴板项目粘贴撇号,但验证仍然失败。

撇号在文件后面的 .net 代码中看起来与 .net 表单不同,并且由于验证仍然失败,我假设由于 .cs 的某种编码,它被认为是不同的字符源文件?

这听起来有道理吗,其他人也遇到过同样的问题吗?

谢谢

【问题讨论】:

    标签: c# .net regex validation


    【解决方案1】:

    如果您刚刚将’ (U+2019 RIGHT SINGLE QUOTATION MARK) 粘贴到您的文档中并且它不起作用,则意味着您的文档不使用 unicode。

    当您将文件编码并发送为UTF-8(例如)时,它可以正常工作而无需进一步修改。否则,您必须通过 \u2019 转义它,这也适用于 JavaScript 的正则表达式:

    "\w+([-+.'\u2019]\w+)@\w+([-.]\w+).\w+([-.]\w+)"
    

    【讨论】:

      【解决方案2】:

      在 Outlook 之类的东西中会有使用“智能引号”的趋势

      Here's一些背景资料

      【讨论】:

        【解决方案3】:

        在 XML 中,您可以通过根据其字符实体引用评估撇号字符来测试撇号字符的值:

        '
        

        但是,该实体在 HTML 的 SGML 形式中不存在。此外,JavaScript 无法将单引号与双引号进行比较。比较时,他们评估为真。唯一的解决方案是将单引号和双引号字符转换为您发明的字符实体引用,执行比较,然后用正确的引号字符替换这些发明的实体引用。

        【讨论】:

          【解决方案4】:

          您应该在 ([-+.'`]\w+) 之后添加一个“+”,以允许多组“单词”。你给出的表达式只允许两个词,你有三个:Chris、O、Brian。

          希望这能让事情更清楚。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-02-20
            • 2010-12-05
            • 1970-01-01
            • 2011-10-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-27
            相关资源
            最近更新 更多