javascript - 带有电话面具的验证表
问题描述
我有一个带有电话面具的表格,但是当所有电话号码都没有填写时,我无法制作红色borderColor
,而当一切都正确时,我无法制作绿色。
HTML
<form id="border1">
<input type="text" placeholder="Phone number" class="phone_mask">
</form>
<button id="button" class="form-button" onclick="checkNum(document.querySelector('.phone_mask'))">
Sign up
</button>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js" type="text/javascript"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.maskedinput@1.4.1/src/jquery.maskedinput.js"
type="text/javascript"></script>
CSS
.phone_mask {
border: 2px solid #eef0ef;
border-radius: 3px;
height: 41px;
width: 327px;
margin: 30px 0px 0px 19px;
padding-left: 12px;
outline: none;
}
.phone_mask:focus {
border: 2px solid #bdd9f7;
border-radius: 2px;
box-shadow: 0px 0px 2px 3px #bdd9f7;
height: 41px;
width: 327px;
outline: none;
}
JS
let phoneBlock = document.querySelector('.phone_mask')
let phone = $(".phone_mask").mask("+38(099)999-99-99");
function checkNum() {
if (!phone) {
phoneBlock.style.borderColor = 'red';
}
else {
phoneBlock.style.borderColor = 'green'
}
}
请帮帮我,谢谢!
解决方案
您不需要使用 JavaScript 来验证电话模式。
相反,使用输入属性pattern
来验证模式,然后使用伪类为有效模式添加边框:valid
我的代码中的模式应该是+38-999-99-999
.phone_mask {
border: 2px solid #eef0ef;
border-radius: 3px;
height: 41px;
width: 327px;
margin: 30px 0px 0px 19px;
padding-left: 12px;
outline: none;
}
.phone_mask:focus {
border: 2px solid #bdd9f7;
border-radius: 2px;
box-shadow: 0px 0px 2px 3px #bdd9f7;
height: 41px;
width: 327px;
outline: none;
}
.phone_mask:valid {
border: 2px solid limegreen;
}
<form id="border1">
<input type="tel" placeholder="Phone number" class="phone_mask"
pattern="[+]{1}[3]{1}[8]{1}-[0-9]{3}-[0-9]{2}-[0-9]{3}" required>
<button id="button" class="form-button" onclick="">Sign up</button>
</form>
对于电话号码,请使用type="tel"
.
pattern
简而言之属性:
- 使用方括号 (
[]
) 指定什么字符(或字符范围) -[1-9]
/[+]
/[9]
- 之后,使用摆动括号 (
{}
) 指定应该有多少个字符 -{1}
等{2}
。 - 在您之间可以添加分隔符 - (
-
或/
)
如果你严格地想使用.mask
jQuery,你去:
带有 jQuery 和 Masked Input 插件的电话掩码
学到更多:
推荐阅读
- javascript - TypeError:无法使用 THREE.Points() 将未定义转换为 Three.js 中的对象
- node.js - 如何在 JSON Schema Validator 中使用 if else 条件
- sql - 按行对逗号分隔的数据集进行排序
- c# - 如何在测试方法上触发 AutoResetEvent 等待句柄?
- javascript - 菜单页面 CSS HTML 下出现的文本
- java - 在我的 JtextPane 上没有自动显示我的键盘的字符
- matlab - 从 3D 数组中的多个页面访问不同的行
- performance - 如何修复 Lighthouse 返回的错误:NO_FCP
- css - Webpack 无法识别 css 加载器
- javascript - 字符串字母表的前两个字符和后两个字符的正则表达式应该是数字