usted puede hacer esto (sólo una idea esbozado, sin código):
idear una expresión regular que coincide con la totalidad de su texto. Use cadenas fijas para las partes no modificables, y use [\s\S]*?
para las partes modificables. Use ^
y $
para anclar su expresión regular.
/^This is fixed text\. Now something editable:[\s\S]*?Now fixed again\.$/
Ahora reaccionar al evento keyup
, y probablemente otros eventos, así (como paste
).
Con cada evento relevante, compruebe si la expresión regular aún coincide.
Si no lo hace, cancele el evento.
Efectivamente, esto debería detener las modificaciones a las partes que son literales en la expresión regular y, por lo tanto, hacer que ciertas partes de su texto sean de solo lectura.
No olvide probar la cadena en el servidor también después de la publicación del formulario: nunca confíe en que el cliente no puede enviar valores no válidos.
EDITAR
Se puede utilizar una función de cotización de expresiones regulares para crear dinámicamente a partir de cadenas de expresiones regulares que, esto debe ahorrar mucho la molestia.
function regexQuote(s) { return s.replace(/[\[\]^$*+?{}.|\\]/g, "\\$&") }
uso
var re = new Regex(
"^" +
[regexQuote(fixedPart1), regexQuote(fixedPart2)].join("[\\s\\S].*?")
+ "$"
);
existirá el contenido no editable en porciones separadas del texto, o que será fijado (ex: al principio o al final)? –
@Mohammed La solución ideal dada mi situación específica sería tener lotes de texto editable. Esas partes serían identificables al estar encerradas entre algunos marcadores (como @ {} por ejemplo) –
Hola Kensai, ¿Terminaste implementando una solución? Me gustaría saber de eso porque estoy tratando de hacer esto ahora. Gracias! – user418775