标识符必须以一个字母(a-z 或 A-Z)或下划线(_)开头,后续字符可以是字母、数字(0-9)或下划线。
const handleInput=(e:any,type:any)=>{
const rawInput = e.target.value;
const pattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
// 使用正则剔除所有非预期字符(包括中文),并确保首字符合法
const cleanedInput = rawInput.replace(/^[^a-zA-Z_]|[^a-zA-Z0-9_]/g, '');
const validStart = cleanedInput.match(pattern);
if (validStart) {
// 如果清洗后的输入以允许的字符开始,则直接设置
if(type=='source'){
state.sourceTableName = validStart[0];
}else{
state.targetTableName = validStart[0];
}
} else if (cleanedInput) {
if(type=='source'){
state.sourceTableName = cleanedInput.charAt(0) === '_' || /^[a-zA-Z]/.test(cleanedInput.charAt(0)) ? cleanedInput.charAt(0) : '';
}else{
state.targetTableName = cleanedInput.charAt(0) === '_' || /^[a-zA-Z]/.test(cleanedInput.charAt(0)) ? cleanedInput.charAt(0) : '';
}
} else {
if(type=='source'){
state.sourceTableName = '';
}else{
state.targetTableName = '';
}
}
}