验证Salesforce Id

时间:2012-03-16 18:51:30

标签: regex salesforce

有没有办法验证Salesforce ID,可能使用RegEx?它们通常是15个字符或18个字符,但它们是否遵循我们可以用来检查它是否是有效ID的模式。

提前致谢!

9 个答案:

答案 0 :(得分:23)

验证salesforce ID有两个级别:

  1. 使用正则表达式[a-zA-Z0-9]{15}|[a-zA-Z0-9]{18}
  2. 检查格式
  3. 对于18个有问题的ID,您可以查看3-character checksumenter image description here

答案 1 :(得分:21)

这样的事情应该有效:

[a-zA-Z0-9]{15,18}

有人建议这可能更正确,因为它可以防止长度为16和17个字符的ID被拒绝,我们也会尝试匹配18个字符长度,第15个长度作为后备:

[a-zA-Z0-9]{18}|[a-zA-Z0-9]{15}

答案 2 :(得分:9)

我遇到的最简单的方法是创建一个新的ID变量并为其分配一个String。

ID MyTestID = null;
try {
    MyTestID = MyTestString; }
catch(Exception ex) { }

如果MyTestID在尝试分配后为空,则该ID无效。

答案 3 :(得分:5)

只需使用instanceOf检查字符串是否是Id的实例。

String s = '1234';
if (s instanceOf Id) System.debug('valid id');
else System.debug('invalid id');

答案 4 :(得分:3)

到目前为止,此正则表达式已为我提供了最佳结果。

\b[a-z0-9]\w{4}0\w{12}|[a-z0-9]\w{4}0\w{9}\b

答案 5 :(得分:1)

JavaScript:/ ^(?=。*?\ d)(?=。*?[a-z])[a-z \ d] {18} $ / i

这些是我的Salesforce ID验证要求。

  1. 仅18个字符
  2. 至少一位数字
  3. 至少一个字母
  4. 不区分大小写

测试用例

应该失败

1
a
1234
abgcde
1234aDcde
12345678901234567*
123456789012345678
abcDefghijabcdefgh

应该通过

1234567890abcDeFgh
1234abcd1234abcd12
abcd1234abcd1234ab
1abcDefhijabcdefgf
abcDefghijabcdefg1
12345678901234567a
a12345678901234567

要了解正则表达式,请参阅this thread

答案 6 :(得分:0)

根据我的经验,15个字符的ID有几种类型:

  • 001600000 .....
  • 001000000 .....
  • 001f20000 .....

答案 7 :(得分:0)

Daniel Sokolowski提供的正则表达式可以完美地验证ID是否采用正确的格式。

如果要验证id是否对应于数据库中的实际记录,则需要首先从前三个字符(通常称为前缀)中找到对象类型,然后查询对象类型:

boolean isValidAndExists(String key) {
    Map<String, Schema.SObjectType> objTypes = Schema.getGlobalDescribe();

    for (Schema.SObjectType objType : objTypes.values()) {
        Schema.DescribeSObjectResult objDesc = objType.getDescribe();
        if (objDesc.getKeyPrefix() == key.substring(0,3)) {
            String objName = objDesc.getName();
            String query = 'SELECT Id FROM ' + objName + ' WHERE Id = \'' + key + '\'';
            SObject[] objs = Database.query(query);
            return !objs.isEmpty();
        }
    }
    return false;
}

请注意,如果经常使用Schema.getGlobalDescribe,则操作可能会很昂贵,并且会降低应用程序的性能。 如果需要经常检查,建议您创建一个“自定义设置”或“自定义元数据”以存储前缀和对象类型之间的关系。

答案 8 :(得分:0)

您还可以检查15个字符,然后添加额外的3个字符(可选),其表达式类似于:

predict(rf, df2, type = "response")

是否在^[a-z0-9]{15}(?:[a-z0-9]{3})?$ 模式下

i

Demo


如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

jex.im可视化正则表达式:

enter image description here