帐户地址字段上的正则表达式验证

时间:2017-10-03 14:24:56

标签: regex validation salesforce

我们将Salesforce帐户和机会同步到QuickBooks(QB),但QB在其字段上有字符限制。街道线每行有41个字符的限制,我正在尝试使用正则表达式控制并限制它,但它不适用于地址字段类型。我使用的是非常简单的条件公式:

REGEX(BillingStreet, '.{42,}')

匹配任何非换行符,如果它是42个字符或更多,则触发验证。问题是它忽略了这条规则。我知道这个公式有效,因为如果我将它应用到另一个文本字段,它的工作方式应该是这样的。以下是它应该如何工作的示例:https://www.regexpal.com/99217。如果在任何地方都匹配,则应该抛出验证错误。

有什么想法吗?

1 个答案:

答案 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+行外。