0

我认为最近一些全球性的变化已经发生在电子邮件寻址协议上。现在我们在电子邮件地址中允许使用一组新的字符。

例如在西班牙,我们有字符“ñ”,现在允许在电子邮件地址中使用,例如 mañoso@example.com

SugarCE(版本 6.5.9)的问题是联系人 email1 字段中有一个验证不允许存储此字符,并且在保存表单时它会给出“无效值”错误。

有谁知道这个验证功能在源代码中的哪里,所以我可以修改它?

谢谢!

- 更新 -

在 include/SugarEmailAddress/SugarEmailAddress.php 中找到了乍得所说的有关验证的内容,但无法验证我的 ñ 字符。

请帮我根据要求修改此代码:

//bug 40068, According to rules in page 6 of apps.ietf.org/rfc/rfc3696.html#sec-3,
//allowed special characters ! # $ % & ' * + - / = ? ^ _ ` . { | } ~ in local part 
var $regex = "/^(?:['\.\-\+&#!\$\*=\?\^_`\{\}~\/\w]+)@(?:(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|\w+(?:[\.-]*\w+)*(?:\.[\w-]{2,})+)\$/";
4

1 回答 1

0

还有一个javascript验证。

PHP 正则表达式被定义了两次——这在SugarCRM中似乎很正常:

SugarEmailAddress/SugarEmailAddress.php
include/SugarEmailAddress/SugarEmailAddress.php

我已经用这个替换了正则表达式:

var $regex = '/^((?!\s).)*@.*?\.[A-Z]{2,6}$/i';

这并不完美,但对我来说效果很好。所以我们至少可以通过 REST API 存储电子邮件地址。

javascript 验证也存在于两个位置:

include/javascript/sugar_3.js
jssource/src_files/include/javascript/sugar_3.js

我已经用上面的一个替换了两个正则表达式:

OLD 1 : /^\s*[\w.%+\-&'#!\$\*=\?\^_`\{\}~\/]+@([A-Z0-9-]+\.)*[A-Z0-9-]+\.[\w-]{2,}\s*$/i
OLD 2 : /^.*<[A-Z0-9._%+\-&'#!\$\*=\?\^_`\{\}~]+?@([A-Z0-9-]+\.)*[A-Z0-9-]+\.[\w-]{2,}>\s*$/i

现在我们可以在本地存储 IDN 电子邮件地址和具有 UTF-8 字符的地址。

这不是一个完美的解决方案,但它对我有用。也许它也对你有用。

于 2014-02-27T15:45:16.250 回答