Actualmente, en mi aplicación, los usuarios pueden agregar teclas ssh de varias líneas en un campo. Además, el usuario puede pegar tantas teclas ssh como desee en ese campo. En este momento tengo la siguiente expresión regular para este comportamiento:
const publicSshKeyRegex = /^(ssh-rsa AAAAB3NzaC1yc2|ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNT|ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzOD|ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1Mj|ssh-ed25519 AAAAC3NzaC1lZDI1NTE5|ssh-dss AAAAB3NzaC1kc3)[0-9A-Za-z+/]+[=]{0,3}(\s.*)?(\n|$)/;
Pero ahora lo que quiero es no permitir que los usuarios agreguen claves ssh de varias líneas y no permitirles agregar varias claves ssh. Significa que el usuario podrá agregar solo una tecla ssh y debe estar en una sola línea. Entonces, el comportamiento esperado sería Agregar solo una tecla ssh, una sola línea.
¿Alguien podría ayudarme a crear una nueva expresión regular para un nuevo comportamiento de espera?
¿Esta parte del patrón (\s.*)?
opcionalmente coincide con un carácter de espacio en blanco (que también puede coincidir con una nueva línea) seguido del resto de la cadena, lo que permite que coincidan 2 líneas.
Si solo desea una línea, puede omitir esa parte y agregar .*
para que coincida con el resto de la línea, seguido de una nueva línea opcional y afirmar el final de la cadena.
Al hacerlo, esta parte [=]{0,3}
se vuelve opcional y la clase de carácter [0-9A-Za-z+/]+
se puede acortar para que coincida con al menos un solo carácter.
^(?:ssh-rsa AAAAB3NzaC1yc2|ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNT|ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzOD|ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1Mj|ssh-ed25519 AAAAC3NzaC1lZDI1NTE5|ssh-dss AAAAB3NzaC1kc3)[0-9A-Za-z+/].*\n?$
Demostración de expresiones regulares
const regex = /^(?:ssh-rsa AAAAB3NzaC1yc2|ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNT|ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzOD|ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1Mj|ssh-ed25519 AAAAC3NzaC1lZDI1NTE5|ssh-dss AAAAB3NzaC1kc3)[0-9A-Za-z+/].*\n?$/; [ "ssh-rsa AAAAB3NzaC1yc2a", "ssh-rsa AAAAB3NzaC1yc2a\n", "ssh-rsa AAAAB3NzaC1yc2a\ntest\n" ].forEach(s => console.log(`${s} --> ${regex.test(s)}`));