我们将Salesforce帐户和机会同步到QuickBooks(QB),但QB在其字段上有字符限制。街道线每行有41个字符的限制,我正在尝试使用正则表达式控制并限制它,但它不适用于地址字段类型。我使用的是非常简单的条件公式:
REGEX(BillingStreet, '.{42,}')
匹配任何非换行符,如果它是42个字符或更多,则触发验证。问题是它忽略了这条规则。我知道这个公式有效,因为如果我将它应用到另一个文本字段,它的工作方式应该是这样的。以下是它应该如何工作的示例:https://www.regexpal.com/99217。如果在任何地方都匹配,则应该抛出验证错误。
有什么想法吗?
答案 0 :(得分:0)
我最终没有使用正则表达式,因为它看起来效果不佳。相反,我使用公式来确保它遵循验证。由于我们有两条线的限制,所以要做到这一点并不是太糟糕。
AND(
IF(
//Look for a line break. If there is one, split and compare lengths separately.
FIND(MID( $Setup.Global__c.CLRF__c ,3,1), BillingStreet ) > 0
,
IF(
//If the first line is over the limit, return true to trigger validation.
LEN(LEFT(BillingStreet, FIND(MID( $Setup.Global__c.CLRF__c ,3,1), BillingStreet )-2))>41
,
TRUE
,
//If first line is fine, check second line and since this is a condition, it will return true/false automatically.
LEN(MID(BillingStreet, FIND(MID( $Setup.Global__c.CLRF__c ,3,1), BillingStreet )+1,LEN(BillingStreet))) > 41
)
,
//If there is no line break (one line) check the total length.
LEN(BillingStreet) > 41
)
,
//There is a validation for having more than 2 lines. Without this, it will combine lines 2 and above and check that length and will be confusing to users when it's > 41.
NOT(REGEX( BillingStreet , '(.*\r?\n.*){2,}'))
,
//Ignore this rule if the user has this flag active. Useful for bulk updating and don't have to worry about import errors.
$User.Bypass_Validation__c = False
)
此作品MID( $Setup.Global__c.CLRF__c ,3,1)
代表Salesforce中的换行符。从find line break in formula field了解它的工作原理。我本来想使用正则表达式,但如果你问我,它就不会起作用。除了检查上面代码中的2+行外。