regex - vee 验证正则表达式不起作用
问题描述
我需要使用 vee-validate 和这个基本的正则表达式来验证美国电话号码 XXX-XXX-XXXX : (?:\d{3}-)\d{3}-\d{4}
。正则表达式本身可以正常工作,但不适用于 vee-validate,我不确定为什么。
标记
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vee-validate@latest/dist/vee-validate.js"></script>
</head>
<body>
<div id="app">
<form action='#' method='POST'>
<input v-validate="'required|regex:^(?:\(\d{3}\)|\d{3}-)\d{3}-\d{4}$'" :class="{'input': true, 'is-danger': errors.has('phone_primary') }" class="input is-info" type="text" name='phone_primary' value="$phone_primary" placeholder="404-555-1212" size="15">
<span v-show="errors.has('phone_primary')" class="help is-danger">{{ errors.first('phone_primary') }}</span>
<button class="button is-link" name='submitform' value='go'>Submit</button>
</form>
</div>
<script>
Vue.use(VeeValidate);
new Vue({
el: '#app',
template: '#app',
data: {
phone_primary: null
}
});
</script>
</body>
</html>
正则表达式没有按预期工作,我做错了什么?
解决方案
该指令接受一个字符串值,它是一个由管道 ( )v-validate
分隔的验证列表。|
由于管道也在正则表达式模式中使用(作为交替运算符),因此字符串命令无效。作为一种解决方法,传递一个对象而不是字符串值。
此外,中的正则表达式vee-validate
需要正则表达式分隔符,/
模式周围的字符。
所以,你可以使用
v-validate="{ required: true, regex:/^(?:\(\d{3}\)|\d{3}-)\d{3}-\d{4}$/ }"
请参阅更新的小提琴。
请注意,正则表达式与空字符串不匹配,因此空输入无效。
推荐阅读
- python - 为什么我的变量名在 root 中定义但在 Top-level 中无法识别?
- python - ModuleNotFoundError:Pycharm 中没有名为“dns”的模块
- vue.js - Vuex 异步/等待调度
- java - 如何使用 swagger、openapi 和生成器处理不兼容的 api 更改
- python - Selenium webdriver python无法上传文件-send_keys抛出ElementNotInteractable
- python - 重定向到 django 上的不同页面
- mongodb - 在 MongoDB 中向 $lookup 结果添加一个字段
- c++ - 在 C++ 中为我的类型为 vscode 调试器创建“可视化器”
- javascript - 如何调用 OwlCarousel react 方法
- angular - 带有异步重定向的角度路由加载