SQL 服务器和 patindex 意外结果

SQL server and patindex unspected result

我正在尝试用 NANP 格式验证 phone 个数字。

我正在使用此代码

 patindex('+1[2–9][0-9][0-9][2–9][0-9][0-9][0-9][0-9][0-9][0-9]', n)

但没有按预期工作,一些应该有效的数字(如 +14104536330)与表达式不匹配。

我用示例代码创建了一个 SQL Fiddle。 我的 patindex 表达式有什么问题?

已将您的字符串复制到十六进制编辑器,[2-9] 显示为:

+1[2â9][0-9][0-9][2â9][0-9][0-9][0-9][0-9][0-9][0-9]

2和9之间的十六进制码是E2 80 93,也就是UTF-8 for "en dash"。所以问题基本上是你输入了一个有趣的破折号。当您 copy/paste 离开 Microsoft 自动更正环境(如 Outlook、Word 或 Excel)时,可能会发生这种情况。自动更正会默默地将您的破折号升级为美观的破折号。