何时一个撇号不是撇号——验证。.Net / Javascript

4
我有一个.NET 2.0的电子邮件正则表达式验证器,使用客户端验证(JavaScript)。
目前的表达式是"\w+([-+.']\w+)@\w+([-.]\w+).\w+([-.]\w+)",适合我的需求(或者我认为是这样)。
然而,当我从Outlook中复制/粘贴电子邮件地址到表单文本字段时,遇到了撇号问题。
Chris.O’Brian@somerandomdomain.com
你可以看到撇号是不同的字符,如果我只是在文本框中键入,则会得到。
'和’ - 但两者都是撇号。
好吧,我想,让我们把这个字符加入到验证字符串中,这样我就可以得到
"\w+([-+.'’]\w+)@\w+([-.]\w+).\w+([-.]\w+)"
我将“特殊”的撇号复制并粘贴到验证表达式中,然后我键入电子邮件并使用相同的剪贴板项目粘贴撇号,但验证仍然失败。
撇号在.net代码后台文件中看起来与.net表单不同,因为验证仍然失败,我推测它被视为不同的字符,因为某种编码.cs源文件?
听起来可行吗?是否有人遇到过相同的问题?
谢谢
4个回答

1

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

希望这能让事情更清楚。


1

在类似Outlook的软件中,使用“智能引号”是一种趋势。

这里提供了一些背景信息。


1

如果您刚刚将 ' (U+2019 RIGHT SINGLE QUOTATION MARK) 粘贴到您的文档中,但它没有起作用,那么这意味着您的文档没有使用 Unicode。

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

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

0
在XML中,您可以通过将其与字符实体引用进行比较来测试撇号字符的值:
'

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接