Forum > Övriga serverspråk > PHP
Hej!
Jag har skapat en funktione som kollar om en fil har ändelsen .torrent, men jag har stött på ett problem då funktionen kollar efter första punkten och stannar där och jämför, det är inte ovanligt att torrentfiler heter Något.annat-här.torrent och inte Något annat-här.torrent. Jag vill nu ha hjälp att se till att funktionen kontrollerar att filändelsen är .torrent.
Nuvarande kod:
function check_torrent($f){
if (!preg_match('/^(.+)\.torrent$/si', $f, $matches)){
return false;
} else {
return true;
}
}
| Skriv utFunction check_torrentFileName($fileName) {
return preg_match('/^.+\.torrent$/im', $fileName);
}(kortat ner din funktion, du kör ju inga matches så det är bara onödigt att skapa en referens du aldrig använder) kör en check att den slutar på .torrent så den
du kan testar regexp uttrycket på: http://voigt.se/sandbox/regexpjs/
^.+\.torrent
är korrekt. så länge den inte innehåller en radbrytning (som regexp "." innebär).
Provade att köra ^.+\.torrent i din sandlåde skript, och det returnderade hela namnet när jag provade: Community.S01E20.HDTV.XviD-LOL.torrent som värde.
ja, det är ju korrekt, om den matchar uttrycket så skall den retunera det, om den inte hade hittat uttrycket så hade du aldrig fått en matchning.
red:
Dock så missade jag det skulle vara ^.+\.torrent$
Aha då förstår jag, blev lite förvirrad helt enkelt. Vad gör "$" där i slutet? Alltså, vad betyder det?
Som du kanske märker har jag tagit detta uttrycket från ett annat filformat och bara bytat ut mp3 till torrent
^ = början av en sträng (om den inte är i en [] då betyder den matchar INTE det som finns i gruppen)
$= slutet av en sträng
Aha, då är jag med. Dock får jag det inte riktigt att fungera, jag har printat alla värden för att försäkra mig om att rätt data matas in i functionen, och det sker som det skall. Använder samma testvärde, dvs Community.S01E20.HDTV.XviD-LOL.torrent. Tror jag kommer ge mig på att bygga en funktion som räknar 8 tecken bakåt och klipper bort allt annat och sedan kollar om det är .torrent kvar.
Men vännen, din funktion ovan retunera bara true eller false, du tittar på helt fel funktion för denna klipper inget alls, den kollar bara om text innehåller .torrent i slutet.
ditt mönster fungera spelar ingen roll om den heter
c:\WjasdasdWad-ASdasdas-d_asdas.dsada.torrent
så kommer den matchar på den den stoppar vid den första matchningen på ditt regexp uttryck vilket säger att den få börja med vad som helst bara det slutar på .torrent
echo ut din sträng och gör ett element runt det eller vad som hellst, för om den slutar på ".torrent " så kommer uttrycket inte matchas.
php test:
http://php.voigt.se/sandbox/IsFile/
kod:
<?
$normalFile = "filen.jpg";
$torrentFile = "filen.torrent";
$torrentFile2 = "Community.S01E20.HDTV.XviD-LOL.torrent";
function check_torrentFileName($fileName) {
return preg_match('/^.+\.torrent$/im', $fileName);
}
echo($normalFile." = ".check_torrentFileName($normalFile)."<br />".$torrentFile." = ".check_torrentFileName($torrentFile)."<br />".$torrentFile2." = ".check_torrentFileName($torrentFile2));
?>
Det jag menade med "klippa" var en helt annan funktionen, kan ha formulerat mig lite illa kanske.
Nu skäms jag även lite, upptäckte att det var ett stavfel längre upp i uppladdningsskriptet som var anledningen att din funktion inte fungerade direkt, ber om ursäkt.
Kanon ;) då sätter jag tråden som löst