O que o (JavaScript) Expressões Regulares devo usar para garantir uma string é um nome de arquivo válido?

StackOverflow https://stackoverflow.com/questions/130837

  •  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:

  1. Não diretórios. Apenas o nome do arquivo.
  2. necessidades nome do arquivo para estar em minúsculas.
  3. 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).

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top