我需要使用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>
我做错了什么,导致正则表达式没有按照预期工作?
|
字符上:因为你在正则表达式模式中使用它(作为交替运算符),而纯字符串命令就无效了。在 PHP Laravel 中也观察到了类似的问题,解决方法也是相同的:只需使用选项数组即可。v-validate
指令接受一个字符串值,其中包含用管道 (|
) 分隔的验证列表。 由于管道也被用作正则表达式模式中的交替运算符,所以字符串命令就无效了。我在答案中添加了更多细节。 - Wiktor Stribiżew