PHP-向脚本添加异常


PHP - Adding Exception To Script

好的,所以我使用的程序使用PHP脚本。我把它设置为以特定的方式命名剪辑,但有时我们需要更改它来添加一个额外的角色。

现在,根据以下信息,剪辑重命名为:*20_1(XA)*

Scene: 20
Take: 1
Slate:
Clipname: XA001C001.mov
Select:

这就是这样做的脚本:

function GenerateClipname($Scene,$Slate,$Take,$ClipName,$Select)
{
    global $link;
    global $NoSCounter;
    global $NoTCounter;
    $sql="SELECT count(ID) AS Counter FROM shots WHERE Scene='".SqlEscape($Scene)."' AND Select='".SqlEscape($Select)."' AND Take='".SqlEscape($Take)."'";
    $ScanResult=mysql_query($sql,$link);
    $ScanRow = mysql_fetch_array($ScanResult);
    if ($Scene=="")
    {
        $Scene=sprintf("NoScene_%d",$NoSCounter);
        $NoSCounter++;
    }
    if ($Take=="")
    {
        $Take=sprintf("NoTake_%d",$NoTCounter);
        $NoTCounter++;
    }
    $Name=$Scene;
    if ($Take!="") $Name.="_".$Take;
    if ($ClipName!="")
    {
        $Name=$Name." "."(".(strtoupper(substr($ClipName,0,2))).")";    
    }
    if ($Select) $Name.="*";
    return $Name;
}

我想添加的例外是,如果原始剪辑名称的开头只有一个Alpha字符(A001C001.mov),那么脚本会将该剪辑标记为*20_1(A)*,但如果它有两个甚至三个Alpha字符,那么它会添加该字符。我知道脚本中需要受到影响的部分是:

if ($ClipName!="")
    {
        $Name=$Name." "."(".(strtoupper(substr($ClipName,0,2))).")";    
    }

如果需要,我可以提供更多的脚本。

您需要像这样组合preg_match和strpos:

function findFirstNonDigitPart($str) {
  $pat = '('d+)';
  preg_match($pat,$str,$matches);
  if(count($matches) == 0) {
      return false;
  }
  $pos = strpos($str,$matches[0]);  
  return substr($str,0,$pos);
}

$str = "XSA1234234asfaf";
echo findFirstNonDigitPart($str);

在您的情况下,它将是(将函数粘贴到脚本中的某个位置):

if ($ClipName!="") {
    $part = findFirstNonDigitPart($ClipName);
    if($part === false) {
        throw new Exception("Something wrong with the clipname");
    }
    $Name=$Name." "."(".strtoupper($part).")";    
}
if ($ClipName!="")
{
    $pattern = '#^(''p{L}{1,3}).?*$#'; // group(letter chars, case insensitive, lenght 1-3) + other 
    $prefix = preg_replace($pattern, '$1', $ClipName); // take matching (first) group as replacement if present
    if ($prefix == $ClipName) {
        // nothing extracted (no matching prefix)
    } else {
        $Name=$Name." "."(".(strtoupper($prefix).")";
    }
}

不知道如何处理各种名称(例如,没有$前缀)+其他模式以防万一:

'#^([a-zA-Z]{1,3}).?*$#'-仅英文字母字符

'#^([a-zA-Z]+).?*$#'-英语,不限长度(与[A-Z]{1,}相同)