不能。lay-verify 不支持引用外部 JS 文件中的正则,仅接受内置类型或内联正则字面量;复用需通过 form.verify() 在 script 中注册规则,并用 lay-verify="ruleName" 调用。
lay-verify 能不能直接引用外部 JS 文件里的正则?
不能。
的值只接受内置验证类型(如
、
)或内联的正则字面量(如
),不支持加载外部 js 文件中的变量或函数。
想复用正则,怎么在 HTML 里写才不重复又可维护?
把正则逻辑抽到页面级
中,用 Layui 的
手动注册验证规则,而不是依赖
属性自动触发。
在
中定义正则:比如
调用
表单元素改用
—— 这个
是你注册的名字,不是正则本身
注意:必须在
内部或之后执行
,否则会报
为什么不用
写在 HTML 里?
虽然语法上允许,但实际很脆弱:
斜杠会被 HTML 解析器误截断(尤其含
或
时),导致规则失效
无法复用、无法加注释、无法做动态判断(比如根据国家码切不同正则)
Layui 对这种内联正则不做转义处理,
会被当成字符串而非正则对象,校验永远失败
多人协作时,正则散落在 HTML 里,改一个要翻十几处模板
外部正则文件怎么真正“引用”进来?
靠标准的
,但内容必须是可执行的 JS 代码,不是纯正则文本。
外部文件(如
)写成:
页面中先引入该文件,再在
里用
引用
别用
或模块语法——Layui 2.x 默认不支持 ES Module,会报
如果用了构建工具(如 webpack),确保
挂在全局,或通过
暴露给 Layui
复杂点在于:Layui 的验证机制是同步注册 + 异步触发,所有自定义规则必须在表单渲染前完成注册;很多人把
放在 DOM 加载后但
之前,结果规则没生效。
lay-verifyrequiredemaillay-verify="/^1[3-9]\d{9}$/"form.verify()lay-verifyconst phoneReg = /^1[3-9]\d{9}$/;form.verify({ phone: function(value, item) { if (!phoneReg.test(value)) return '手机号格式不对'; } });lay-verify="phone"phonelayui.use(['form'], ...)form.verify()form is not definedlay-verify="/.../"/>lay-verify="/\d{11}/"reg.jswindow.REGS = { phone: /^1[3-9]\d{9}$/, idCard: /^\d{17}[\dXx]$/ };layui.useform.verify({ phone: ... })REGS.phoneimportUnexpected token 'export'REGSexternalsform.verify()form.render()