Domanda

Voglio verificare se una stringa è un nome file (nome DOT ext) oppure no.

Il nome del file non può contenere /? *:; {} \

Potresti suggerirmi l'espressione regex da usare in preg_match ()?

È stato utile?

Soluzione

Ecco qua:

"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"

" Uno o più caratteri che non sono nessuno di questi, quindi un punto, quindi altri caratteri che non sono questi. "

(Fintanto che sei sicuro che il punto sia veramente richiesto - in caso contrario, è semplicemente: " [^ /? * :; {} \\] + "

Altri suggerimenti

$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.

Il regex sarebbe qualcosa di simile (per un'estensione di tre lettere):

^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$

PHP ha bisogno di barre rovesciate e preg_match () ha bisogno di sfuggire alle barre, quindi:

$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";

Per abbinare nomi di file come " hosts " o " .htaccess " , usa questa espressione leggermente modificata:

^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$

Sotto il regex usando per controllare il nome del file Unix in un programma Golang:

    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*<*>quot;)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top