有没有办法验证Salesforce ID,可能使用RegEx?它们通常是15个字符或18个字符,但它们是否遵循我们可以用来检查它是否是有效ID的模式。
提前致谢!
答案 0 :(得分:23)
验证salesforce ID有两个级别:
[a-zA-Z0-9]{15}|[a-zA-Z0-9]{18}
答案 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
a
1234
abgcde
1234aDcde
12345678901234567*
123456789012345678
abcDefghijabcdefgh
应该通过
1234567890abcDeFgh
1234abcd1234abcd12
abcd1234abcd1234ab
1abcDefhijabcdefgf
abcDefghijabcdefg1
12345678901234567a
a12345678901234567
要了解正则表达式,请参阅this thread
答案 6 :(得分:0)
根据我的经验,15个字符的ID有几种类型:
答案 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
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式: