======2025.07.25 23:00 更新======
原有提取链接的正则表达式不够严谨,自己使用时提取出现了问题,现进行修复。
// 使用更精确的正则表达式 const urlRegex = /(https?|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
参考:https://www.cnblogs.com/speeding/p/5097790.html
======2025.07.25原文======
因为个人需求,经常需要从文本中提取链接转换成二维码使用,于是用AI写了一个小工具。
核心功能:提取文本中的单个链接转换成二维码
线上地址:https://lab.lklog.cn/QRcode/
代码如下:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>链接转二维码</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; text-align: center; } h1 { margin: 20px 0; color: #333; } textarea { width: 100%; height: 150px; padding: 10px; margin-bottom: 20px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; } button { background-color: #4CAF50; color: white; border: none; padding: 12px 24px; text-align: center; text-decoration: none; display: block; font-size: 16px; margin: 10px auto; cursor: pointer; border-radius: 4px; transition: background-color 0.3s; } button:hover { background-color: #45a049; } #qrcode { margin: 30px auto; padding: 20px; background-color: white; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.1); display: none; } .result-url { margin-top: 20px; word-break: break-all; color: #666; font-size: 14px; } .error-message { color: red; margin-top: 10px; display: none; } </style> <script src="https://cdn.jsdelivr.net/npm/qrcode-generator@1.4.4/qrcode.min.js"></script> </head> <body> <h1>链接转二维码</h1> <textarea id="textInput" placeholder="请粘贴包含单个链接的文本"></textarea> <button onclick="generateQRCode()">生成二维码</button> <div class="error-message" id="errorMessage"></div> <div id="qrcode"></div> <div class="result-url" id="resultUrl"></div> <script> function generateQRCode() { const textInput = document.getElementById('textInput').value.trim(); const urlRegex = /(https?:\/\/[^\s]+)/g; const matches = textInput.match(urlRegex); // 隐藏之前的结果和错误信息 document.getElementById('qrcode').style.display = 'none'; document.getElementById('resultUrl').textContent = ''; document.getElementById('errorMessage').style.display = 'none'; if (!textInput) { showError('请输入内容'); return; } if (!matches) { showError('未找到有效的HTTP/HTTPS链接'); return; } if (matches.length > 1) { showError('找到多个链接,请只输入一个链接'); return; } const link = matches[0]; // 显示提取的链接 document.getElementById('resultUrl').textContent = `提取的链接: ${link}`; // 生成二维码 const qr = qrcode(4, 'L'); qr.addData(link); qr.make(); const qrcodeDiv = document.getElementById('qrcode'); // 调整二维码大小为原来的60% qrcodeDiv.innerHTML = qr.createImgTag(6, 0); qrcodeDiv.style.display = 'inline-block'; } function showError(message) { const errorMessage = document.getElementById('errorMessage'); errorMessage.textContent = message; errorMessage.style.display = 'block'; } </script> </body> </html>