Open zhangxinxu opened 4 years ago
function telTrim(str){
var tel = str.replace(/[\s-]/g, '');
if (/^\d{11}$/.test(tel)) {
return tel;
}
return str;
}
var form = document.getElementById('form');
var input = document.getElementById('input');
input.addEventListener('drop',function(ev){
ev.preventDefault();
var text = ev.dataTransfer.getData('text');
this.value = telTrim(text);
})
input.addEventListener('paste',function(ev){
ev.preventDefault();
var text = ev.clipboardData.getData('text');
this.value = telTrim(text);
})
form.addEventListener('submit',function(ev){
ev.preventDefault();
input.value = telTrim(input.value);
})
<p>132-0803-3621(短横线需要过滤)</p>
<p>132 0803 3621(短横线需要过滤)</p>
<p>132-0803-3621@qq.com(短横线不能过滤)</p>
<form id="form">
<input value="132 0803 3621" name="tel" id="input" placeholder="邮箱或密码" />
<input type="submit"/>
</form>
//1
function telTrim(tel) {
tel2 = tel.replace(/-|\s/g, '')
if (/^\d{11}$/.test(tel2)) {
return tel2;
}
return tel;
}
console.log(telTrim('132-0803-3621'));
console.log(telTrim('132 0803 3621'));
console.log(telTrim('132-0803-3621@qq.com'));
//2
var form = document.querySelector("#form");
var input = document.querySelector("#input");
console.log(form);
console.log(input);
//3
var dragText = '';
window.addEventListener("dragstart", function (event) {
//copy from https://www.zhangxinxu.com/study/201104/get-selection-text.html
var userSelection, text;
if (window.getSelection) {
//现代浏览器
userSelection = window.getSelection();
} else if (document.selection) {
//IE浏览器 考虑到Opera,应该放在后面
userSelection = document.selection.createRange();
}
if (!(text = userSelection.text)) {
text = userSelection;
}
dragText = text.toString();
});
input.addEventListener("drop", function (event) {
event.preventDefault();
this.value = telTrim(dragText);
});
//4
input.addEventListener('paste', function (event) {
event.preventDefault();
let paste = (event.clipboardData || window.clipboardData).getData('text');
this.value = telTrim(paste);
});
//5
form.addEventListener('submit',function(event){
event.preventDefault();
input.value = telTrim(input.value);
})
// 2
var form = document.getElementById("form");
var input = document.getElementById("input");
// 1
function telTrim(tel) {
// 先先判断是否有可能是手机号
if (/\d{11}/.test(tel) || !!tel.match(/[^\d\-\s]/)) {
return tel;
} //else {
return tel.replace(/-|\s/g, "").trim();
// }
}
// 3
input.addEventListener("drop", function(e) {
// 默认输入框为空
e.preventDefault();
var text = e.dataTransfer.getData("text");
// 改变输入框的值
input.value = telTrim(text);
});
//获取剪贴板数据方法
function getClipboardText(event) {
var clipboardData = event.clipboardData || window.clipboardData;
return clipboardData.getData("text");
}
// 4
input.addEventListener("paste", function(e) {
e.preventDefault();
// 默认原始输入框为空
var txt = getClipboardText(e);
// console.log(txt);
var newTxt = telTrim(txt);
document.execCommand("insertText", false, newTxt);
});
// 5
form.addEventListener("submit", function(e) {
e.preventDefault();
var tel = input.value;
var tmp = tel.match(/\d/g);
// 符合手机格式 直接提交
if (tmp && tel.length === 11) {
form.submit();
return true;
}
// 不符合的修改为符合的格式
input.value = telTrim(tel);
return false;
});
JSBIN: 点我
// 第一题
function telTrim(numTel){
if(!numTel){
return '';
}
var strNoSpace = numTel.split(' ').join('');
var strNoLine = strNoSpace.split('-').join('');
if(strNoLine.length === 11){
return strNoLine;
}
return strNoSpace;
};
console.log(telTrim('132- 0803-3621 '), telTrim('132-0803-3621@qq.com'));
// 第二题
var eleForm=document.getElementById('form');
var eleInput=document.getElementById('input');
console.log({eleForm, eleInput});
// 第三题
eleInput.addEventListener('input', function(e){
if(e.inputType=="insertFromDrop"){
e.target.value = telTrim(e.target.value);
}
});
// 第四题
eleInput.addEventListener('input', function(e){
if(e.inputType=="insertFromPaste"){
e.target.value = telTrim(e.target.value);
}
});
// 第五题
eleForm.addEventListener('submit',function(e){
e.preventDefault(); // 为了效果暂时阻止提交
eleInput.value = telTrim(eleInput.value);
});
// 1.
function telTrim(s) {
var s1 = s.replace(/[\s-]/g, '')
return /^[0-9]{11}$/.test(s1) && s1 || s
}
console.log(telTrim('132-0803-3621'), telTrim('132-0803-3621@qq.com'))
// 2.
var form = document.getElementById('form')
var input = document.getElementById('input')
// 3.
input.addEventListener('drop', e => {
e.preventDefault()
var text = e.dataTransfer.getData('text')
e.target.value = telTrim(text)
e.target.select()
})
// 4.
input.addEventListener('paste', e => {
e.preventDefault()
var text = e.clipboardData.getData('text')
e.target.value = telTrim(text)
e.target.select()
})
// 5.
form.addEventListener('submit', e => {
e.preventDefault()
input.value = telTrim(input.value)
})
// 1
function telTrim(val) {
if (val.includes('@')) {
return val
}
return val.match(/\d/g).length == 11 ? val.replace(/\s|-/g, '') : val
}
// 2
let form = document.querySelector('#form');
let input = document.querySelector('#input');
// 3
input.addEventListener('drop', function (event) {
event.preventDefault()
this.value = telTrim(event.dataTransfer.getData('text/plain'))
})
// 4
input.addEventListener('paste', function (event) {
event.preventDefault()
this.value = telTrim(event.clipboardData.getData('text/plain'))
})
// 5
form.addEventListener('submit', function (event) {
event.preventDefault()
input.value = telTrim(input.value)
})
// 1
function telTrim (str) {
return str.match(/[0-9]/g).length === 11 && str.replace(/[-\s]/g, '').length === 11 && str.replace(/[-\s]/g, '') || str
}
// 2
const myForm = document.getElementById('form')
const myInput = document.getElementById('input')
// 3
myInput.addEventListener('drop', e => {
setTimeout(() => {
myInput.value = telTrim(e.target.value)
}, 0)
})
// 4
myInput.addEventListener('paste', e => {
setTimeout(() => {
myInput.value = telTrim(e.target.value)
}, 0)
})
// 5
myForm.addEventListener('submit', e => {
e.preventDefault()
myInput.value = telTrim(myInput.value)
})
function telTrim(strTel){
var temp=strTel.replace(/-|\s/g,'');
return /^\d{11}$/.test(temp)?temp:strTel.trim();
}
let [$form,$input]=['form','input'].map(v=>document.getElementById(v));
$input.addEventListener('drop',function(event){
event.preventDefault();
this.value = telTrim(event.dataTransfer.getData('text'));
});
$input.addEventListener('paste',function(event) {
event.preventDefault();
this.value = telTrim(event.clipboardData.getData('text'));
});
$form.addEventListener('submit',function(event){
event.preventDefault();
$input.value = telTrim($input.value);
})
Demo https://codepen.io/crazyboy/pen/WNbwWGY 1.
var telTrim = function(val) {
return !val ? '' : (val.match(/^1([ -]?[0-9]){10}$/) ? val.replace(/[ -]/g,'') : val);
}
2.
document.querySelector('form#form');
document.querySelector('input#input');
3/4.
document.querySelector('input#input').oninput = function(e) {
e.target.value = telTrim(e.target.value);
}
5.
document.querySelector('form#form').onsubmit = function(e) {
e.target['input'].value = telTrim(e.target['input'].value);
}
DEMO 感觉输入框里有字的时候,应该不对被复制的字符串做处理
// 第一题
function telTeim(tel) {
const isAllNum = /^[\d\-\s]+$/.test(tel)
const trimTel = tel.trim().replace(/[\s\-]/g, '')
return isAllNum && trimTel.length === 11 ? trimTel : tel
}
console.log(telTeim('132-0803-3621'))
console.log(telTeim('132-0803-3621@qq.com'))
// 第二题
const form = document.getElementById('form')
const input = document.getElementById('input')
// 第三题
input.addEventListener('drop', event => {
if (event.target.value.length === 0) {
event.preventDefault()
const text = event.dataTransfer.getData("text")
event.target.value = telTeim(text)
}
})
// 第四题
input.addEventListener('paste', event => {
const { value, selectionStart, selectionEnd } = event.target
if (value.length === 0 || selectionEnd - selectionStart) {
event.preventDefault()
let paste = (event.clipboardData || window.clipboardData).getData('text');
event.target.value = telTeim(paste)
}
})
// 第五题
form.addEventListener('submit', event => {
event.preventDefault()
input.value = telTeim(input.value)
form.submit()
})
// 1. 格式化手机号
function trimTel(str) {
if (!str) {
return str
}
const hasTrim = str.replace(/[\s-]/g, '');
return (/^\d{11}$/).test(hasTrim) ? hasTrim : str
}
console.error(trimTel('138-0013-8000'));
console.error(trimTel('138 0013 8000'));
console.error(trimTel('138 0013 8000@qq.com'));
// 2. 获取id是form的表单元素,和id是input的输入框元素
// 方法1
console.log(document.getElementById('form'));
console.log(document.getElementById('input'));
// 方法2
console.log(document.querySelector('#form'));
console.log(document.querySelector('#input'));
// 方法3
console.log(document.forms['form']);
console.log(document.forms['form']['input']);
const input = document.querySelector('#input');
const form = document.querySelector('#form');
//3. 拖拽格式化手机号
input.addEventListener('drop', function (e) {
e.preventDefault();
this.value = trimTel(e.dataTransfer.getData('text'));
});
// 4. 粘贴格式化
input.addEventListener('paste', function (e) {
e.preventDefault();
this.value = trimTel(e.clipboardData.getData('text'));
});
// 5. 提交前格式化
form.addEventListener('submit', function (e) {
e.preventDefault();
input.value = trimTel(input.value);
this.submit()
})
// 1
function telTrim(str = '') {
str = str.trim();
var tel = str.replace(/\s|-/g, '');
if (/^\d{11}$/.test(tel)) {
return tel;
}
return str;
}
// 2
var form = document.getElementById('form');
var input = document.getElementById('input');
// 3
input.addEventListener('drop', function(event) {
var dropText = event.dataTransfer.getData('text');
this.value = telTrim(dropText);
this.focus();
this.setSelectionRange(0, this.value.length);
event.preventDefault();
});
// 4
input.addEventListener('paste', function(event) {
var pasteText = (event.clipboardData || window.clipboardData).getData('text');
var selectionStart = 0;
var selectionEnd = 0;
// 如果输入框中是全选状态或没有文本即对粘贴文档进行处理
if (this.selectionEnd - this.selectionStart === this.value.length) {
var dealText = telTrim(pasteText);
this.value = dealText;
selectionEnd = dealText.length;
} else {
// 否则就只对选中区域进行替换操作
selectionStart = this.selectionStart;
selectionEnd = selectionStart + pasteText.length;
this.value =
this.value.slice(0, this.selectionStart) +
pasteText +
this.value.slice(this.selectionEnd);
}
this.setSelectionRange(selectionStart, selectionEnd);
event.preventDefault();
});
// 5
form.addEventListener('submit', function(event) {
input.value = telTrim(input.value);
})
// 第一题
function telTrim (tel) {
let num = tel.replace(/[\s-]/g, '')
return (num.replace(/[\D]/g, '') === num && num.length === 11) ? num : tel
}
// 过滤用户的输入,返回正确的手机号或邮箱
function filterInput (userInput) {
userInput = userInput.trim()
return telTrim(userInput)
}
// 第二题
let form = document.forms.form
let input = document.getElementById('input')
// 第三题
input.addEventListener('drop', e => {
e.preventDefault()
let text = e.dataTransfer.getData('text') // 获取拖拽文本
input.value = filterInput(text)
})
// 第四题
input.addEventListener('paste', e => {
e.preventDefault()
let text = e.clipboardData.getData('text') // 获取复制文本
input.value = filterInput(text)
})
// 第五题
form.addEventListener('submit', e => {
input.value = filterInput(input.value)
})
{
function telTrim(str) {
str = str.replace(/\s|-/g, "");
if (/^1\d{10}$/.test(str)) {
return str;
}
return str;
}
let oForm = document.querySelector("#form")
let oInput = document.querySelector("#input")
oInput.addEventListener("drop", function(e){
e.preventDefault();
this.value = telTrim(e.dataTransfer.getData("text"));
})
oInput.addEventListener("paste", function(e){
e.preventDefault();
this.value = telTrim(e.clipboardData.getData("text"));
})
oForm.addEventListener("submit", e => {
e.preventDefault
oInput.value = telTrim(oInput.value);
})
}
<p>132-0803-3621</p>
<p>132-0803-3621@qq.com</p>
<form id="form">
<input id="input" placeholder="邮箱或密码">
<input type="submit" value="提交">
</form>
// 第一题
function telTrim (str) {
let tel = str.replace(/[-\s]/g, '');
if (/^[0-9]{11}$/g.test(tel)) {
return tel;
}
return str;
}
// 第二题
let form = document.getElementById('form');
let input = document.getElementById('input');
// 第三题
input.addEventListener('drop',function(e){
let ev = e || window.event;
if (ev && ev.preventDefault) {
ev.preventDefault();
} else {
ev.returnValue = false;
}
let userSelection = '';
if (window.getSelection) { //一般浏览器
userSelection = window.getSelection();
} else if (document.selection) { //IE浏览器、Opera
userSelection = document.selection.createRange();
}
userSelection.toString();
this.value = telTrim(userSelection.toString());
},false);
// 第四题
input.addEventListener('paste',function(e){
let ev = e || window.event;
let clipboardData = e.clipboardData || window.clipboardData;
let paste = clipboardData.getData('text');
if (ev && ev.preventDefault) {
ev.preventDefault();
} else {
ev.returnValue = false;
}
this.value = telTrim(paste);
console.log(2)
},false);
// 第五题
form.addEventListener('submit',function(ev){
ev.preventDefault(); // 暂时组织提交刷新,为了看input的值有没有变化
input.value = telTrim(input.value);
return true;
},false)
var reg = {
tel: /^\d{11}$/,
email: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
}
// 验证是否式正确邮箱/手机格式
function emailAndMob(str){
return reg.tel.test(str) || reg.email.test(str) ;
}
// 第一题
function telTrim(mob){
let phone = mob.replace(/\s|-/g,'');
return reg.tel.test(phone) ? phone : mob ;
}
console.log(telTrim('132-0803-3162'))
console.log(telTrim('132-0803-3621@qq.com'));
// 第二题
let forms = document.querySelector('#form'),
inputs = document.querySelector('#input');
// 这里偷懒以下错误均直接清空 实际应提示错误
// 第三题
inputs.ondrop = function(e){
let val = telTrim(e.dataTransfer.getData('text'));
this.value = emailAndMob(val) ? val : '';
return false; //阻止默认事件
}
// 第四题
inputs.onchange= function(e){
let val = telTrim(this.value);
this.value = emailAndMob(val) ? val : '';
}
// 第五题 回车提交
forms.onsubmit = function(e){
let isTrue = emailAndMob(inputs.value);
inputs.value = isTrue ? telTrim(inputs.value) : '';
return isTrue;
}
function telTrim(str) {
str = String(str);
const s = str.replace(/[\s-]/g, '');
return /^\d{11}$/.test(s) ? s : str;
}
const formElm = document.getElementById('form');
const inputElm = document.getElementById('input');
// 或者
const formElm = document.forms['form'];
const inputElm = formElm['input'];
inputElm.addEventListener('drop', function(e) {
e.preventDefault();
this.value = telTrim(e.dataTransfer.getData('text'));
});
inputElm.addEventListener('paste', function(e) {
e.preventDefault();
const { selectionStart: start, selectionEnd: end } = this; // 文本框光标位置
const text = e.clipboardData.getData('text');
this.setRangeText(text, start, end); // 从当前光标位置追加粘贴的内容
this.value = telTrim(this.value); // 格式化文本框内容
});
formElm.addEventListener('submit', function(e) {
e.preventDefault();
inputElm.value = telTrim(inputElm.value);
// 后续提交表单的操作... 如 ajax 或 this.submit();
});
//第1题
function telTrim(str) {
console.log(str)
if(!str) return ;
let newStr = str.replace(/\s|-/g,''),
reg = /^[0-9]+.?[0-9]*$/;
if(newStr.toString().length == 11 && reg.test(newStr)) {
return newStr;
}else {
return str;
}
}
//console.log(telTrim('132-8083-3621@qq.com'))
//第2题
let form = document.getElementById("form");
let input = document.getElementById("input");
//第3题
input.addEventListener('input', _ => {
if(input.value != '') {
input.value = telTrim(input.value)
}
})
//第4题
function fun() {
if(input.value != '') {
input.value = telTrim(input.value)
}
}
//第5题
input.addEventListener('blur', _ => {
if(input.value != '') {
input.value = telTrim(input.value)
}
})
// 第一题
function telTrim(str) {
if (str.indexOf('@') === -1) {
return str.replace(/\D/g, '')
} else {
return str
}
}
console.log(telTrim('132-0803-3621@qq.com'))
console.log(telTrim('132-0803-3621'))
// 第二题
let formX = document.querySelector('#form')
let inputX = document.querySelector('#input')
// 第三题
inputX.addEventListener('input', function (e) {
if (e.inputType == "insertFromDrop") {
e.target.value = telTrim(e.target.value);
}
});
// 第四题
inputX.addEventListener('input', function (e) {
if (e.inputType == "insertFromPaste") {
e.target.value = telTrim(e.target.value);
}
});
// 第五题
formX.addEventListener('submit', function (e) {
e.preventDefault()
inputX.value = telTrim(inputX.value);
});
demo // 第一
function trlTrim(str) {
return str.match(/[\d\s-]+/g)[0] === str && str.replace(/\D/g, '').length === 11 ? str.replace(/[\s-]+/g, '') : str
}
// 第二
var formDom = document.getElementById('form');
var inputDom = document.getElementById('input');
// 第三
let pitchOnEle // 拖拽元素
var PDomAll = document.querySelectorAll('p');
PDomAll.forEach(item => {
// 当拖动元素或选中的文本到一个可释放目标时触发
item.addEventListener('dragstart', (ev) => {
pitchOnEle = item
item.parentNode.classList.add('pitch-on')
})
// 当拖拽操作结束时触发 (比如松开鼠标按键或敲“Esc”键).
item.addEventListener('dragend', (ev) => {
item.parentNode.classList.remove('pitch-on')
})
})
// 当元素或选中的文本在可释放目标上被释放时触发
inputDom.addEventListener('dragover', (ev) => {
ev.target.placeholder = pitchOnEle.innerHTML
event.preventDefault(); // 阻止默认的点击事件执行
})
// 当元素或选中的文本在可释放目标上被释放时触发
inputDom.addEventListener('drop', (ev) => {
ev.target.value = trlTrim(pitchOnEle.innerHTML)
event.preventDefault(); // 阻止默认的点击事件执行
})
// 4
inputDom.addEventListener('paste', (ev) => {
let paste = (ev.clipboardData || window.clipboardData).getData('text');
paste = trlTrim(paste);
const selection = window.getSelection();
if (!selection.rangeCount) return false;
selection.deleteFromDocument(); // 删除文本
inputDom.value = paste
ev.preventDefault()
})
// 5
inputDom.addEventListener('blur', (ev) => {
ev.target.value = ev.target.value && trlTrim(ev.target.value)
})
function telTrim(strTel) {
temp = strTel.replace(/\s|-/g, "");
if (/^\d{11}$/.test(temp)) {
return temp;
}
return strTel;
}
var form = document.getElementById('form');
var input = document.getElementById('input');
input.addEventListener("drop", function(e) {
e.preventDefault();
input.value = telTrim(e.dataTransfer.getData("text"));
});
input.addEventListener("paste", function(e) {
e.preventDefault();
input.value = telTrim(e.clipboardData.getData("text"));
});
form.addEventListener('submit', function(ev) {
ev.preventDefault();
input.value = telTrim(input.value);
})
// 1.
const telTrim = (str) => {
newStr = str.split(' ').join('');
newStr = newStr.split('-').join('');
if (/^1\d{10}$/.test(newStr)) return newStr;
return str;
}
console.log(telTrim('132-0803-3621'))
console.log(telTrim('132-0803-3621@qq.com'))
// 2.
const formEle = document.querySelector('#form');
const inputEle = document.querySelector('#input');
// 3.
inputEle.addEventListener('drop',function(e){
e.preventDefault();
const str = e.dataTransfer.getData('text');
this.value = telTrim(str);
}, false)
// 4.
inputEle.addEventListener('paste',function(e){
e.preventDefault();
const str = (e.clipboardData || window.clipboardData).getData('text');
this.value = telTrim(str);
}, false)
// 5.
formEle.addEventListener('submit', function(e){
e.preventDefault()
const value = inputEle.value;
inputEle.value = telTrim(value);
}, false)
// 第一题
function telTrim(str) {
let reg1 = /[\.-\s]*/g
if (str.replace(reg1, "").length == 11) {
return str.replace(reg1, "")
} else {
return str
}
}
// 第二题
let formEle = document.getElementById("form")
let inputEle = document.getElementById("input")
// 第三题
inputEle.addEventListener("drop", ev => {
var data = ev.dataTransfer.getData("Text");
console.log(data)
inputEle.value = telTrim(data)
ev.preventDefault();
})
dragEle.addEventListener('dragstart', ev => {
console.log(ev)
ev.dataTransfer.setData("Text", ev.target.innerText);
})
// 第四题
inputEle.addEventListener('paste', ev => {
ev.preventDefault()
inputEle.value = telTrim(ev.clipboardData.getData('text'))
})
// 第五题
formEle.addEventListener('submit', function(ev) {
ev.preventDefault();
inputEle.value = telTrim(inputEle.value);
})
// 第一题
function telTrim(str) {
let strResult = str.replace(/[\s-]/g, '')
return /^\d{11}$/g.test(strResult) ? strResult : str
}
// 第二题
let formEl = document.getElementById('form')
let inputEl = document.getElementById('input')
// 第三题
inputEl.addEventListener('drop', e => {
e.preventDefault()
inputEl.value = telTrim(e.dataTransfer.getData('text'))
})
// 第四题
document.addEventListener('paste', e => {
e.preventDefault()
inputEl.value = telTrim(e.clipboardData.getData('text'))
})
// 第五题
formEl.addEventListener('submit', e => {
inputEl.value = telTrim(inputEl.value)
})
本期要点:
经过我的测试, 在 submit 事件里面处理表单里面的数据, 会发送修改后的数据, 所以不用进行停止默认事件的操作
经过我的测试, 在 submit 事件里面处理表单里面的数据, 会发送修改后的数据, 所以不用进行停止默认事件的操作
好的,感谢反馈,我再看下。
经过我的测试, 在 submit 事件里面处理表单里面的数据, 会发送修改后的数据, 所以不用进行停止默认事件的操作
我测试了下,IE浏览器下并不是这样的,Firefox和Chrome符合你说的策略。
我测试了下,IE浏览器下并不是这样的,Firefox和Chrome符合你说的策略。
我只在 FF/Chrome/Safari 上测试, 忘记测试 IE 了. 如果要兼容 IE, 应该对 preventDefault 事件作判断, 因为 IE 上不支持这个方法
form.addEventListener('submit', function(event) {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
input.value = telTrim(input.value);
this.submit();
})
本期小测关于手机号优化的事件处理。
积分:2+1+2+2+2
大家提交回答的时候,注意缩进距离,起始位置从左边缘开始;另外,github自带代码高亮,所以请使用下面示意的格式(缩进和代码高亮1积分),本期小测需要提供demo,没有demo会扣1积分。
其他 本周六正常答疑,12月14日上午10:00,直播地址:https://live.bilibili.com/21193211
每位答题者会有至少2积分参与分,本次小测满分11积分。
首位答题者将会获得100%被翻牌的技能。