vue.js - 名称 Alpha 验证不允许使用空格
问题描述
我在 vue js 中编写如下新形式。在名称字段中,我想输入“John Doe”。基本上它是名字和姓氏的组合。
我尝试了一些正则表达式而不是名称的 alpha 验证。但它也不允许我输入空格键。当我点击空格键时,单词之间没有显示空格。
validations: {
name: {
required,
isNameValid:helpers.regex('isNameValid',^[a-zA-Z0-9_ ]*$),
minLength: minLength(4)
},
<input
v-model.trim="$v.name.$model"
name="name"
label="Name"
:error="$v.name.$error"
@input="delayTouch($v.name)"
/>
<script>
import {
validationMixin
} from "vuelidate";
import {
required,
alpha,
minLength,
email,
helpers
} from "vuelidate/lib/validators";
import { createNamespacedHelpers } from "vuex";
const {
mapGetters: mapQuoteGetters,
mapState: mapQuoteState
} = createNamespacedHelpers("mydata");
// For delayed validation
const touchMap = new WeakMap();
export default {
name: "MoveInfo",
mixins: [validationMixin],
data() {
return {
name: ""
};
},
computed: {
...mapQuoteState({
mydata: "mydata"
})
},
methods: {
delayTouch($v) {
$v.$reset()
if (touchMap.has($v)) {
clearTimeout(touchMap.get($v))
}
touchMap.set($v, setTimeout($v.$touch, 1000))
}
},
validations: {
name: {
required,
alpha,
minLength: minLength(4)
},
谁能告诉我如何解决这个问题以及我的正则表达式有什么问题?
解决方案
您的正则表达式接近正确:
尝试这个
isNameValid: helpers.regex('isNameValid',/^[a-z0-9_ ]*$/i),
您所缺少的只是表达式的开始和结束斜杠,JavaScript 需要这些斜杠才能知道您指的是正则表达式 - 可以在此处找到更多信息:https ://stackoverflow.com/a/ 32120870/8298506
我还删除了A-Za-z
并将其替换/i
为不区分大小写的标志,这将导致[A-Z]
匹配[A-Za-z]
值得注意的[A-Za-z0-9_ ]
是等价速记[\w ]
请理解,这些只会匹配 A-Za-z,它不会接受重音字符、希腊语或俄语等。如果国际化支持对您很重要,您需要查找 regexp-unicode 的解决方案 - 详细信息其中有点超出了这个答案的范围,但这是一个起点https://javascript.info/regexp-unicode
推荐阅读
- javascript - 单击表中的特定按钮
- oracle - 创建过程并在表中插入值
- android - Android Studio - 用户登录
- angularjs - 尝试在 Web API 和 Angular 中将数据表导出到 Excel(1.000.000 条记录),编写流式处理会引发内存不足异常
- amazon-web-services - 如何使用 boto3 删除 VPC 及其所有依赖项?
- control-m - 如何在 Control M 中为数据库作业/任务运行 pl/sql 语句(执行类型:- 嵌入式查询)
- reactjs - 道具改变时更新状态
- angular - 如何将 *ngFor 分成 4 个部分?在角度
- scala - 比较数据框列中存在的scala中的日期
- php - PHP用新结构对多维数组的内容进行分组