Regex per trovare un nome file valido
-
06-07-2019 - |
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 ()?
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;)