diff --git a/frontend/src/utils/stockValidator.ts b/frontend/src/utils/stockValidator.ts index 0c20ee4..6fb4c85 100644 --- a/frontend/src/utils/stockValidator.ts +++ b/frontend/src/utils/stockValidator.ts @@ -20,26 +20,44 @@ export enum MarketType { * @returns 是否为有效的A股代码 */ export const validateAStock = (code: string): boolean => { - // 上海证券交易所股票代码以6开头,6位数字 - // 深圳证券交易所股票代码以0或3开头,6位数字 - // 科创板股票代码以688开头,6位数字 + // 深A主板股票代码00开头,6位数字 + // 中小板股票代码002、003、004开头,6位数字 + // 创业板股票代码300开头,6位数字 + // 沪A主板股票代码600、601、603开头,6位数字 + // 科创板股票代码688开头,6位数字 + // 深B股票代码200开头,6位数字 + // 沪B股票代码900开头,6位数字 + // 老三板A股代码400开头,6位数字 + // 老三板B股代码420开头,6位数字 // 北京证券交易所股票代码以8开头,一般为5位数字(如80XXX) - // 北交所科技创新板块股票代码以43开头,6位数字 - // 注意:中小板、创业板代码格式已合并处理 + // 股转挂牌股票代码430、830开头,6位数字 - // 验证上海证券交易所(以6开头的6位数字) - if (code.startsWith('6') && /^\d{6}$/.test(code)) { - return true; - } + // 所有6位数字的股票代码前缀 + const validPrefixes6Digits = [ + '00', // 深A主板 + '002', // 中小板 + '003', // 中小板 + '004', // 中小板 + '300', // 创业板 + '600', // 沪A主板 + '601', // 沪A主板 + '603', // 沪A主板 + '688', // 科创板 + '200', // 深B股 + '900', // 沪B股 + '400', // 老三板A股 + '420', // 老三板B股 + '430', // 股转挂牌股票 + '830' // 股转挂牌股票 + ]; - // 验证深圳证券交易所(以0或3开头的6位数字) - if ((code.startsWith('0') || code.startsWith('3')) && /^\d{6}$/.test(code)) { - return true; - } - - // 验证科创板(以688开头的6位数字) - if (code.startsWith('688') && /^\d{6}$/.test(code)) { - return true; + // 验证6位数字的股票代码 + if (/^\d{6}$/.test(code)) { + for (const prefix of validPrefixes6Digits) { + if (code.startsWith(prefix)) { + return true; + } + } } // 验证北京证券交易所(以8开头的股票) @@ -48,11 +66,6 @@ export const validateAStock = (code: string): boolean => { return true; } - // 验证北交所科技创新板块(以43开头的6位数字) - if (code.startsWith('43') && /^\d{6}$/.test(code)) { - return true; - } - return false; }; @@ -109,7 +122,7 @@ export const validateStockCode = ( if (!validateAStock(code)) { return { valid: false, - errorMessage: `无效的A股股票代码格式: ${code}。A股代码应以0、3、6、688、8或43开头,且为6位数字(北交所8开头为5位数字)` + errorMessage: `无效的A股股票代码格式: ${code}。支持的代码格式包括:深A主板(00)、中小板(002/003/004)、创业板(300)、沪A主板(600/601/603)、科创板(688)、深B股(200)、沪B股(900)、老三板(400/420)、北交所(8开头5位数)、股转系统(430/830)` }; } break;