InfoLens / client /src /shared /core /urlUtils.ts
dqy08's picture
重构仓库目录;增加Propagated attribution动画;UI改进
17037b0
Raw
History Blame Contribute Delete
1.38 kB
/**
* URL 工具函数
*/
/**
* 验证 URL 格式
* @param url 待验证的 URL 字符串
* @returns 是否为有效的 URL
*/
export function isValidUrl(url: string): boolean {
if (!url || typeof url !== 'string') {
return false;
}
try {
const urlObj = new URL(url.trim());
return urlObj.protocol === 'http:' || urlObj.protocol === 'https:';
} catch {
return false;
}
}
/**
* 检测文本中是否包含 URL
* @param text 待检测的文本
* @returns 找到的第一个 URL,如果没有则返回 null
*/
export function extractUrl(text: string): string | null {
if (!text || typeof text !== 'string') {
return null;
}
// 简单的 URL 正则匹配
const urlPattern = /https?:\/\/[^\s]+/gi;
const match = text.trim().match(urlPattern);
if (match && match.length > 0) {
const url = match[0].replace(/[.,;:!?]+$/, ''); // 移除末尾的标点符号
return isValidUrl(url) ? url : null;
}
return null;
}
/**
* 检查文本是否为纯 URL(没有其他内容)
* @param text 待检查的文本
* @returns 是否为纯 URL
*/
export function isPureUrl(text: string): boolean {
if (!text) {
return false;
}
const trimmed = text.trim();
return isValidUrl(trimmed) && trimmed.split(/\s+/).length === 1;
}