O que o (JavaScript) Expressões Regulares devo usar para garantir uma string é um nome de arquivo válido?
-
02-07-2019 - |
Pergunta
Eu ainda estou aprendendo RegEx no momento, mas para o momento alguém poderia me ajudar com isso? Eu tenho alguns requisitos especiais para formatar a string:
- Não diretórios. Apenas o nome do arquivo.
- necessidades nome do arquivo para estar em minúsculas.
- espaços em branco necessidade de ser substituídos por sublinhados.
não deve ser difícil, mas estou pressionado pelo tempo e não tenho certeza sobre a maneira 'correta' para garantir um nome de arquivo válido (ou seja, não me lembro qual personagens deveriam ser inválido para nomes de arquivos).
Solução
E uma simples combinação de RegExp e outros javascript é o que eu recomendaria:
var a = "c:\\some\\path\\to\\a\\file\\with Whitespace.TXT";
a = a.replace(/^.*[\\\/]([^\\\/]*)$/i,"$1");
a = a.replace(/\s/g,"_");
a = a.toLowerCase();
alert(a);
Outras dicas
Se você estiver com pressa super-rápida, normalmente você pode encontrar expressões regulares aceitáveis ??na biblioteca http: // regexlib.com/. Editar a dizer:. Aqui está um que trabalho poder para você
Se você está tomando um caminho corda do usuário (por exemplo., Lendo o .value de um campo de upload de arquivo), você não pode realmente ter certeza de que o caractere separador de caminho é. Pode ser uma barra invertida (Windows), barra (Linux, OS X, BSD etc.) ou algo completamente diferente no velho ou obscurecer OSs. Dividindo o caminho em frente ou barra invertida cobrirá os casos comuns, mas é uma boa idéia para incluir a capacidade para o usuário substitua o nome do arquivo no caso de nós adivinhou errado.
Como para 'caracteres inválidos' estes também dependem do sistema operacional. Provavelmente o caminho mais fácil é para substituir todos os não-alfanuméricos com um espaço reservado como um sublinhado.
Aqui está o que eu uso:
var parts= path.split('\\');
parts= parts[parts.length-1].split('/');
var filename= parts[parts.length-1].toLowerCase();
filename= filename.replace(new RegExp('[^a-z0-9]+', 'g'), '_');
if (filename=='') filename= '_'
Gostaria de verificar o RegEx Biblioteca .
Você pode escolher a partir de qualquer número de expressões regulares pré-configurados de diferentes graus de robustez para atender às suas necessidades.