什么时候是Apostrophe而不是撇号 - 验证.Net / Javascript

时间:2009-09-21 11:38:38

标签: c# .net regex validation

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

当前表达式是“\ w +([ - +。'] \ w +) @ \ w +([ - 。] \ w +)。\ w +([ - 。] \ w +)“这符合我的需要(或者我认为)。

然而,由于我将Outlook中的电子邮件地址复制/粘贴到表单文本字段中,因此我遇到了撇号问题

Chris.O'Brian@somerandomdomain.com

你可以看到撇号是一个与我刚刚输入文本框的内容不同的字符

'vs' - 但两者都是撇号

好的我想,让我们在验证字符串中添加这个字符,这样我就可以了

“\ W +([ - + ''] \ W +) @ \ W +([ - ] \ W +)的 \ W +([ - ] \ W +)。< / EM>“

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

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

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

由于

4 个答案:

答案 0 :(得分:1)

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

希望这会让事情更加清晰。

答案 1 :(得分:1)

像Outlook这样的趋势会使用'智能行情'

Here's一些背景信息

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

&apos;

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