Just nu i M3-nätverket
Gå till innehåll

Reguljära uttryck


Esuk

Rekommendera Poster

Hittade inget vettigt att posta detta inlägget i så jag fick ta PHP.

 

jag har ett reguljärt uttryck som egentligen är mycket längre än det här som jag postar, men det är denna del som skiter sig.

 

$valid = erag("\"([a-zA-Z0-9 \[\]\&\(\)\.\/_-=]){1,255}\"",$rad);

 

mellan dessa " " som finns i filen finns olika sökvägar t.ex.

 

"/esuk/filer/backup/word/mitt_word_doc.doc"

 

Jag behöver godkänna alla tecken som är möjliga att skriva i en sökväg inklusive mellanslag.

 

Några idér på vad som är fel ?

Har jag glömt några teckan ?

 

skall jag tänka om och istället skriva vilka tecken som inte får vara med ? (isådana fall så har jag glömt hur man gör :) )

 

 

Don't Underestimate The Power Of Esuk ...

Länk till kommentar
Dela på andra webbplatser

Jag förstår inte riktigt vad det är du vill göra. Du har en fil, med olika filnamn i, och varje filnamn är separerade med ett mellanslag, samt omgiven av "-tecken, eller är varje filnamn på en ny rad?

 

Sen vill du läsa in hela filen, och validera den, för att se om något filnamn inte är giltigt?

 

Följande tar en variabel med data, och skapar en matris med varje filnamn i. fungerar både om filnamnen är separerade av mellanslag eller ny rad:

$matris = preg_split ("/(^\")|(\"[[:space:]]\")|(\"$)/", $data, -1, PREG_SPLIT_NO_EMPTY);

Ovanstående ta även bort "-tecknena. Mig veterligen så finns det inga ogiltiga tecken i ett Unixsystem, förrutom /, och detta kan du ju inte kontrollera om det är giltigt eller inte. (uppdat: eftersom det ingår i katalogstrukturen)

 

Frågan är nu vad du ska med filnamnen till? beroende på ditt svar, så kan du ju antingen kolla om filerna finns på servern genom file_exists() eller om det är Windowsfiler, så kan du ju loopa genom matrisen och kontrolelra var filnamn för sig:

foreach ($matris as $tmp) {
if (preg_match("/[" . quotemeta(":*?"<>|") . "]/" ,$tmp)) echo "Felaktigt namn: {$tmp}";
}

 

Skriv igen om du behöver mer hjälp.

 

[inlägget ändrat 2002-09-05 14:32:43 av Cariad]

Länk till kommentar
Dela på andra webbplatser

jag försökte förklara bra, men jag lyckades inte fullt ut då =)

 

det är inte bara sökvägar i filerna jag har utan det är just den delen i mitt uttryck som inte fungerar.

 

Hela uttrycket ser ut så här

$visa = ereg("^([0-9.]{8,15}) ([a-zA-Z0-9]{1,25}) ([a-zA-Z0-9]{1,25}) ([0-9]{4})/([0-9]{2})/([0-9]{2})[0-9]{2})[0-9]{2})[0-9]{2}) ([rwmdl]){1} \"([a-zA-Z0-9 \[\]\&\(\)\.\/_-=]){1,255}\"",$buffer);

 

Men som sagt, det är just den delen som jag postade tidigare som inte fungerade.

 

De filer jag har är loggfiler från ett script jag skrivit, där finns bl.a. IP, användare, datum, tid, fil m.m.

 

Om det skulle gå så kunde jag lägga att mellan mina "" så får det förekomma hur många tecken som helst och vilka tecken som helst, vet du om det går ?

 

Om filerna existerar behöver jag inte veta.

 

Don't Underestimate The Power Of Esuk ...

 

Länk till kommentar
Dela på andra webbplatser

Jaha, var det ett så enkelt problem. Här har jag suttit och engagerat min otroliga hjärnkapacitet när det bara var ett så simpelt problem:

 

\"([a-zA-Z0-9 \[\]\&\(\)\.\/_-=]){1,255}\"

 

bytes mot

 

\"([^\"]*)\"

alt

\"([^\"]{1,255})\"

beroende på vad det är för loggfil. Det är ju inte helt omöjligt att filnamnet är över 255 tecken (använd då den övre).

 

Sen hade du skrivit ett inlägg i powerwebs-debatten. Om du inte läste mitt inlägg där så kan jag varmt rekommendera Levonline.com, som alltid har senaste PHP och MySQL versionerna.

 

Länk till kommentar
Dela på andra webbplatser

jag skall genast testa exemplet (eller nästan genast, har ingen lust att sätta mig på spårvagnen till jobbet och sedan mecka med larmet för att testa... tar det i morgon *ler* )

 

Levonline verkar helt OK, men jag har inte bestämt mig för om jag skall låta min sida leva vidare eller inte.

 

Don't Underestimate The Power Of Esuk ...

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...