Cómo manejar el error de sintaxis de JavaScript: The only valid numeric escape in strict mode is '\0'

Cómo manejar el error de sintaxis de JavaScript: The only valid numeric escape in strict mode is '\0'

Mientras trabajaba en una nueva función de una aplicación que debería permitir al usuario proporcionar un nombre de archivo para crear en el sistema, tuve que implementar un validador que debería verificar si la cadena contiene caracteres especiales que no están permitidos en los nombres de archivo. La implementación es la siguiente con JavaScript:

function isFilenameValid(filename){
    return !(new RegExp("[<>:/\\|?*\"]|[\0-\31]").test(filename) || filename.length > 255);
}

Y funciona bastante bien ya que lo probé con los casos comunes en el sandbox, así que lo incluí en el proyecto. Sin embargo, en el tiempo de ejecución de mi proyecto Vue, apareció la excepción mencionada.

Que causa el error

El código que activa la excepción probablemente se esté ejecutando en modo estricto. Puede verificar esto si en algún lugar de su código, hay una cadena simple que especifica el uso del modo estricto:

// Whole-script strict mode syntax
'use strict';

Al usar el modo estricto:

  • No se permiten literales numéricos octales
  • No se permiten caracteres de escape

Otras excepciones que puede encontrar al usar el modo estricto al usar un código como este:

"use strict";
var a = "\300";

var b = "\00a0\00a0";

Son los siguientes:

SyntaxError: Octal numeric literals and escape characters not allowed in strict mode (Edge)
SyntaxError: "0"-prefixed octal literals and octal escape  sequences are deprecated; for octal literals use the "0o" prefix instead

Para obtener más información sobre el modo estricto, consulte la referencia en MDN .

Solución

Necesita escapar de los caracteres literales que están causando el problema. Por ejemplo, en el método que utilicé para validar el nombre del archivo, hay una expresión regular que contiene 2 literales numéricos sin escape (0 y 31), para solucionar el problema es necesario escapar (anteponer doble barra invertida antes del literal numérico [\\0-\\31]). La expresión regular con la solución ahora se vería así:

function isFilenameValid(filename){
    return !(new RegExp("[<>:/\\|?*\"]|[\\0-\\31]").test(filename) || filename.length > 255);
}

Lo mismo funcionaría con los otros ejemplos:

"use strict";
var a = "\\300";

var b = "\\00a0\\00a0";

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable