如何编写仅支持单条单行有效SSH密钥校验的正则表达式
调整后正则
你可以直接使用下面修改后的正则,完全满足单条单行SSH密钥的校验要求:
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]*)?$/;
改动说明
主要针对你原来的正则做了核心调整:
- 把原正则末尾的
(\n|$)替换为$,强制正则匹配整个输入字符串的结尾,不会出现只匹配换行前第一条密钥就通过校验的问题 - 把原正则中匹配注释的
(\s.*)?调整为(\s[^\n]*)?,限制密钥后的注释内容不能包含换行符,彻底阻断多行输入的可能性 - 整个正则从头到尾严格匹配单条密钥格式,天然禁止了同时提交多条密钥的情况
如果要进一步提升可靠性,也可以在校验正则之前先判断输入内容是否包含\n换行符,有换行直接拦截,双重校验更稳妥。
内容的提问来源于stack exchange,提问作者Mahmudul
相关产品推荐
相关产品推荐

