正则表达式的坑

正则表达式特别注意中英文

我因为在表达式中一个问号是中文形式的,结果卡了我两天。

/\\subsection{问题}\\label.*\n?((\s|\S)*?)\\subsection{关键字}/.test(res)

是符合的,

/\\subsection{问题}\\label.*\n?((\s|\S)*?)\\subsection{关键字}/.test(res)

是错误的,也就第一个问号那里有区别。
我是从RegexBuddy直接复制的,不知道为什么也会出现这种错误。

/\\subsection{问题}\\label.*\n?((.|\n)*?)\\subsection{关键字}/.test(res)

这种写法理论上也是正确的,.|\n 和\s|\S理论上都能覆盖所有的符号,不知道为何不行。

<think>嗯,用户这次问的是EasyUI如何使用正则表达式进行表单验证。从引用内容看,用户已经接触过common.js中定义的校验规则示例(vt_user_id),但需要更系统的指导。 用户可能正在开发一个使用EasyUI框架的项目,遇到了表单验证需求。ta特意提到正则表达式,说明需要自定义复杂校验规则。虽然引用里展示了字符集和中文的校验,但用户深层需求应该是掌握完整的正则校验实现流程。 回想起之前讨论过EasyUI基础用法,这次要聚焦在正则验证的实现细节上。需要拆解几个关键点:validator函数写法、正则表达式集成位置、错误提示配置。特别要注意用户引用中提到的转义问题('-'的处理),这可能是实际开发中的常见点。 考虑到用户引用的是0.9版本的语法,现在要补充说明1.x版本的改动,避免版本差异导致问题。同时要强调正则表达式本身和EasyUI的集成是两个独立知识点,准备在最后补充学习资源。 用户应该具备基础的前端知识,但可能对EasyUI的扩展机制熟悉。需要在示例中保持代码的完整性,比如展示完整的$.extend写法,而仅是片段。中文校验的\u4e00-\u9fa5这种表示法可能也需要解释下。 对了,引用中message字段的写法太规范(中文标点混用),在示范代码里要修正为更专业的写法。最后要提醒浏览器兼容性,虽然EasyUI本身兼容性好,但特殊正则语法(如unicode属性)在旧浏览器可能有问题。 </think>EasyUI 使用正则表达式进行表单验证主要通过 `validType` 属性或自定义验证器实现,以下是详细方法: --- ### 方法一:通过 `validType` 属性直接使用正则 在 EasyUI 表单项中可直接用正则表达式定义验证规则: ```javascript <input class="easyui-textbox" data-options=" required: true, validType: ['length[0,12]', 'regexPattern'] "> // 注册正则验证规则 $.extend($.fn.validatebox.defaults.rules, { regexPattern: { validator: function(value) { return /^[0-9a-zA-Z\-_\u4e00-\u9fa5]{0,12}$/.test(value); // 匹配中英文/数字/横线/下划线 }, message: '只允许输入 0-9, a-z, A-Z, -, _, 中文(12字符以内)' } }); ``` ### 方法二:自定义验证器(推荐) 在公用 JS 中扩展验证规则(如 `common.js`): ```javascript // 1. 自定义用户名验证器 $.extend($.fn.validatebox.defaults.rules, { userIdValidator: { validator: function(value) { return /^[\w\-\u4e00-\u9fa5]{0,12}$/.test(value); // 等效于 [0-9a-zA-Z_\-中文] }, message: '输入范围:数字、字母、横线(-)、下划线(_)、中文(最长12字符)' } }); // 2. 页面中使用 <input class="easyui-validatebox" data-options="validType: 'userIdValidator'"> ``` --- ### 关键细节说明: 1. **转义字符处理** `-` 需转义为 `\-`,避免被识别为范围符(如 `[a-z]`) ```javascript /^[a-z\-]+$/ // 正确:匹配小写字母和横线 ``` 2. **中文字符范围** 使用 Unicode 编码 `\u4e00-\u9fa5` 匹配中文字符: ```javascript /[\u4e00-\u9fa5]/ // 匹配任意一个中文字符 ``` 3. **规则组合** 可叠加多个验证规则(长度 + 正则): ```javascript validType: ['length[0,20]', 'userIdValidator'] ``` --- ### 实际应用示例 ```html 用户名:<input id="txtUsername" class="easyui-textbox"> <script> $(function(){ $('#txtUsername').textbox({ required: true, validType: 'userIdValidator' // 引用自定义规则 }); // 扩展规则定义 $.extend($.fn.validatebox.defaults.rules, { userIdValidator: { validator: function(v){ return /^[0-9a-z_\-\u4e00-\u9fa5]{1,12}$/i.test(v); // 区分大小写 }, message: '输入包含数字/字母/中文/_-(1-12字符)' } }); }); </script> ``` > **注意**:EasyUI 1.5+ 版本推荐使用 `$.fn.*box.defaults.rules` 扩展,旧版本可能用 `$.fn.validatebox.defaults.rules` [^1] --- ### 相关问题 1. EasyUI 如何同时验证多个正则条件? 2. 如何在 EasyUI 表单提交时触发自定义正则验证? 3. EasyUI 验证失败时如何自定义错误提示样式? 4. 特殊符号(如 `@`、`.`)在 EasyUI 正则中如何正确转义? [^1]: 引用自公用 JS 中的正则验证实现,适用于 EasyUI 0.9+ 版本。新版语法可能略有调整,建议查阅对应版本文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值