当前位置:网站首页>JS 文本框失去焦点修改全半角文字和符号
JS 文本框失去焦点修改全半角文字和符号
2022-06-28 04:56:00 【fengyehongWorld】
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<hr>
半角数字<input type="text" data-validate="number">
<hr>
半角邮箱<input type="text" data-validate="email">
<hr>
带分号的时间<input type="text" data-validate="time">
</body>
<script src="../jquery.min.js"></script>
<script type="module" src="./js/17-main.js"></script>
</html>
主方法
import typeHandleMap from './17-utils.js'
$(function() {
// 给所有含data-validate的文本输入框绑定焦点失去事件
for(const element of Array.from($('input:text')).values()) {
// 当文本输入框没有 data-validate 属性的时候
const validatetype = element.dataset?.validate;
if(!validatetype) {
return;
}
$(element).on('blur', ({
target}) => {
// 获取校验转换的类型
const validatetypeList = target.dataset?.validate.split(',');
for(const validatetype of validatetypeList.values()) {
// 根据要校验的类型执行对应的方法,将转换之后文本放回文本框中
const invokeMethod = typeHandleMap.get(validatetype);
target.value = invokeMethod.call(this, target.value);
}
});
}
});
封装的工具类
class textHandleUtils {
// 全角和半角假名的对应关系
zen2HanKanaMap = {
'ガ': 'ガ', 'ギ': 'ギ', 'グ': 'グ', 'ゲ': 'ゲ', 'ゴ': 'ゴ',
'ザ': 'ザ', 'ジ': 'ジ', 'ズ': 'ズ', 'ゼ': 'ゼ', 'ゾ': 'ゾ',
'ダ': 'ダ', 'ヂ': 'ヂ', 'ヅ': 'ヅ', 'デ': 'デ', 'ド': 'ド',
'バ': 'バ', 'ビ': 'ビ', 'ブ': 'ブ', 'ベ': 'ベ', 'ボ': 'ボ',
'パ': 'パ', 'ピ': 'ピ', 'プ': 'プ', 'ペ': 'ペ', 'ポ': 'ポ',
'ヴ': 'ヴ', 'ヷ': 'ヷ', 'ヺ': 'ヺ',
'ア': 'ア', 'イ': 'イ', 'ウ': 'ウ', 'エ': 'エ', 'オ': 'オ',
'カ': 'カ', 'キ': 'キ', 'ク': 'ク', 'ケ': 'ケ', 'コ': 'コ',
'サ': 'サ', 'シ': 'シ', 'ス': 'ス', 'セ': 'セ', 'ソ': 'ソ',
'タ': 'タ', 'チ': 'チ', 'ツ': 'ツ', 'テ': 'テ', 'ト': 'ト',
'ナ': 'ナ', 'ニ': 'ニ', 'ヌ': 'ヌ', 'ネ': 'ネ', 'ノ': 'ノ',
'ハ': 'ハ', 'ヒ': 'ヒ', 'フ': 'フ', 'ヘ': 'ヘ', 'ホ': 'ホ',
'マ': 'マ', 'ミ': 'ミ', 'ム': 'ム', 'メ': 'メ', 'モ': 'モ',
'ヤ': 'ヤ', 'ユ': 'ユ', 'ヨ': 'ヨ',
'ラ': 'ラ', 'リ': 'リ', 'ル': 'ル', 'レ': 'レ', 'ロ': 'ロ',
'ワ': 'ワ', 'ヲ': 'ヲ', 'ン': 'ン',
'ァ': 'ァ', 'ィ': 'ィ', 'ゥ': 'ゥ', 'ェ': 'ェ', 'ォ': 'ォ',
'ッ': 'ッ', 'ャ': 'ャ', 'ュ': 'ュ', 'ョ': 'ョ',
'。': '。', '、': '、', 'ー': 'ー', '「': '「', '」': '」', '・': '・'
};
// 半角和全角假名的对应关系
han2ZenKanaMap = {
'ガ': 'ガ', 'ギ': 'ギ', 'グ': 'グ', 'ゲ': 'ゲ', 'ゴ': 'ゴ',
'ザ': 'ザ', 'ジ': 'ジ', 'ズ': 'ズ', 'ゼ': 'ゼ', 'ゾ': 'ゾ',
'ダ': 'ダ', 'ヂ': 'ヂ', 'ヅ': 'ヅ', 'デ': 'デ', 'ド': 'ド',
'バ': 'バ', 'ビ': 'ビ', 'ブ': 'ブ', 'ベ': 'ベ', 'ボ': 'ボ',
'パ': 'パ', 'ピ': 'ピ', 'プ': 'プ', 'ペ': 'ペ', 'ポ': 'ポ',
'ヴ': 'ヴ', 'ヷ': 'ヷ', 'ヺ': 'ヺ',
'ア': 'ア', 'イ': 'イ', 'ウ': 'ウ', 'エ': 'エ', 'オ': 'オ',
'カ': 'カ', 'キ': 'キ', 'ク': 'ク', 'ケ': 'ケ', 'コ': 'コ',
'サ': 'サ', 'シ': 'シ', 'ス': 'ス', 'セ': 'セ', 'ソ': 'ソ',
'タ': 'タ', 'チ': 'チ', 'ツ': 'ツ', 'テ': 'テ', 'ト': 'ト',
'ナ': 'ナ', 'ニ': 'ニ', 'ヌ': 'ヌ', 'ネ': 'ネ', 'ノ': 'ノ',
'ハ': 'ハ', 'ヒ': 'ヒ', 'フ': 'フ', 'ヘ': 'ヘ', 'ホ': 'ホ',
'マ': 'マ', 'ミ': 'ミ', 'ム': 'ム', 'メ': 'メ', 'モ': 'モ',
'ヤ': 'ヤ', 'ユ': 'ユ', 'ヨ': 'ヨ',
'ラ': 'ラ', 'リ': 'リ', 'ル': 'ル', 'レ': 'レ', 'ロ': 'ロ',
'ワ': 'ワ', 'ヲ': 'ヲ', 'ン': 'ン',
'ァ': 'ァ', 'ィ': 'ィ', 'ゥ': 'ゥ', 'ェ': 'ェ', 'ォ': 'ォ',
'ッ': 'ッ', 'ャ': 'ャ', 'ュ': 'ュ', 'ョ': 'ョ',
'。': '。', '、': '、', 'ー': 'ー', '「': '「', '」': '」', '・': '・', '-': 'ー',
};
constructor() {
}
// 半角转换全角(英数符号)
han2ZenAlphaNumberSymbol(value) {
return value.replace(/[!-~]/g, function (s) {
return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
});
}
// 全角转换半角(英数符号)
zen2HanAlphaNumberSymbol(value) {
let s = value.replace(/[!-~]/g, function (s) {
return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});
return s.replace(/[‐-―ー]/g, '-');
}
// 全角假名转换半角假名
zen2HanKana(value) {
const reg = new RegExp('(' + Object.keys(this.zen2HanKanaMap).join('|') + ')', 'g');
return value.replace(reg, function (match) {
return kanaMap[match]; }).replace(/゛/g, '゙').replace(/゜/g, '゚');
}
// 半角假名转换全角假名
han2ZenKana(value) {
const reg = new RegExp('(' + Object.keys(this.han2ZenKanaMap).join('|') + ')', 'g');
return value.replace(reg, function (match) {
return kanaMap[match]; }).replace(/゙/g, '゛').replace(/゚/g, '゜');
}
// 删除数字和 - 之外
removeNonHyphenNumber(value) {
return value.replace(/[^\d-]/g, '');
}
// 删除数字和 : 之外
removeNonColonNumber(value) {
return value.replace(/[^\d:]/g, '');
}
// 删除数字之外
removeNonNumber(value) {
return value.replace(/[^\d]/g, '');
}
}
const textHandleClass = new textHandleUtils();
// 类型对应的处理方法
const typeHandleMap = new Map([
// 全角
['zenkaku', (value) => {
const value1 = textHandleClass.han2ZenKana(value);
return textHandleClass.han2ZenAlphaNumberSymbol(value1);
}],
// 半角
['hankaku', (value) => {
const value1 = textHandleClass.zen2HanKana(value);
return textHandleClass.zen2HanAlphaNumberSymbol(value1);
}],
// 邮箱
['email', (value) => {
return textHandleClass.zen2HanAlphaNumberSymbol(value);
}],
// 电话
['tel', (value) => {
const value1 = textHandleClass.zen2HanAlphaNumberSymbol(value);
return textHandleClass.removeNonHyphenNumber(value1);
}],
// 邮编
['postCode', (value) => {
const value1 = textHandleClass.zen2HanAlphaNumberSymbol(value);
return textHandleClass.removeNonHyphenNumber(value1);
}],
// 用户名
['userName', (value) => {
const value1 = textHandleClass.zen2HanAlphaNumberSymbol(value);
return textHandleClass.han2ZenKana(value1);
}],
// 时间
['time', (value) => {
const value1 = textHandleClass.zen2HanAlphaNumberSymbol(value);
return textHandleClass.removeNonColonNumber(value1);
}],
// 数字
['number', (value) => {
const value1 = textHandleClass.zen2HanAlphaNumberSymbol(value);
return textHandleClass.removeNonNumber(value1);
}]
]);
export default typeHandleMap;
效果
失去焦点前
失去焦点后
边栏推荐
- 氨基染料研究:Lumiprobe FAM 胺,6-异构体
- 控制器的功能和工作原理
- 分享一个因子挖掘的利器:遗传规划
- Audio and video technology development weekly
- 2022年最新辽宁建筑八大员(标准员)考试试题及答案
- CPG 固体支持物研究:Lumiprobe通用 CPG II 型
- A doctor's 22 years in Huawei (full of dry goods)
- Play with double pointer
- !‘cat‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- Severe tire damage: the first rock band in the world to broadcast live on the Internet
猜你喜欢

UI自動化測試框架搭建 —— 編寫一個APP自動化

OracleData安装问题

LeetCode 88:合并两个有序数组

恭喜我自己,公众号粉丝破万

Extjs图书管理系统源码 智能化图书管理系统源码
![[noip2002 popularization group] cross the river pawn](/img/6c/31fa210e08c7fd07691a1c5320154e.png)
[noip2002 popularization group] cross the river pawn

CUPTI error: CUPTI could not be loaded or symbol could not be found.
![[early knowledge of activities] list of recent activities of livevideostack](/img/aa/8b14f9863cd675a7be06a0c3855a93.png)
[early knowledge of activities] list of recent activities of livevideostack

2022新版nft源码中国元宇宙数字藏品艺术品交易平台源码

TACo:一种关于文字识别的数据增强技术
随机推荐
Flexible IP network test tool -- x-launch
2022年G3锅炉水处理复训题库模拟考试平台操作
【微服务|OpenFeign】OpenFeign快速入门|基于Feign的服务调用
OracleData安装问题
A bit of knowledge - online resources on Chinese Learning
Sword finger offer 53 - I. find the number I in the sorted array (improved bisection)
mysql修改密码报错需要怎么做
How do I get the STW (pause) time of a GC (garbage collector)?
交流电和直流电的区别是什么?
MySQL gets the current date of the year
Ppt production tips
电源插座是如何传输电的?困扰小伙伴这么多年的简单问题
Understanding the source of innovation II
Audio and video technology development weekly
Multi thread implementation rewrites run (), how to inject and use mapper file to operate database
[csp-j2020] excellent splitting
100+数据科学面试问题和答案总结 - 机器学习和深度学习
Google Earth engine (GEE) - global flood database V1 (2000-2018)
2022年全国最新消防设施操作员(初级消防设施操作员)模拟题及答案
开关电源电压型与电流型控制