Php 用于验证Active Directory对象SID的正则表达式

Php 用于验证Active Directory对象SID的正则表达式,php,regex,active-directory,Php,Regex,Active Directory,我正在寻找一种方法来验证从Active Directory插入的对象SID是否有效,是否可以使用preg\u match()或preg\u match\u all()? 我在网上查找了用于此验证的正则表达式,但找不到任何内容 例如: $sid = 'S-1-5-21-1220945662-1202665555-839525555-5555'; if ($validator->validateSid($sid)) { // SID is valid! } 我不擅长写正则表达式,所

我正在寻找一种方法来验证从Active Directory插入的对象SID是否有效,是否可以使用
preg\u match()
preg\u match\u all()
? 我在网上查找了用于此验证的正则表达式,但找不到任何内容

例如:

$sid = 'S-1-5-21-1220945662-1202665555-839525555-5555';

if ($validator->validateSid($sid)) {
    // SID is valid!
}
我不擅长写正则表达式,所以如果任何人有任何意见,请让我知道,谢谢

编辑:对于使用以下正则表达式查找代码的任何人:

preg_match("/^S-1-[0-5]-\d{2}-\d{10}-\d{10}-\d{9}-[1-9]\d{3}/", $search, $matches);

// Returns
array(
    0 => S-1-5-21-1220945662-1202665555-839525555-5555
)
或者对于更宽松的模式:

preg_match("/S-1-5-21-\d+-\d+\-\d+\-\d+/", $sid, $matches);

// Returns
array(
    0 => S-1-5-21-1220945662-1202665555-839525555-5555
)
综上所述,以下几点应该是可行的:

/^S-1-[0-59]-\d{2}-\d{10}-\d{10}-\d{8}-[1-9]\d{3}/

hjpotter92的答案对某些SID有效,但不是全部。 每个子权限由一个32位整数组成,根据具体情况,该整数可以是10位或8位。您应该将正则表达式编辑为:

/^S-1-[0-59]-\d{2}-\d{8,10}-\d{8,10}-\d{8,10}-[1-9]\d{3}/

在Windows下创建新的颁发机构时(对于 例如,如果部署了新机器或创建了域),则会为其分配 具有5(任意值)作为标识符权限的SID;固定的 值21用作此集合的根的唯一值 子权限,并创建并分配96位随机数 到三个子权限,每个子权限接收 32位块。


规则是什么?它总是
S-something
-
之间的数字是否限制在一定的数字范围内?我知道这已经有很多年了,但你的“宽松”模式对我起到了作用,而公认的答案并没有起到作用,因为我正在处理的一些小岛屿发展中国家以4、5甚至6位数结束。