regex - 如何为包含字母数字和特殊字符的输入编写匹配项

我的matches有问题。我有一个字段,应该接受一个可以包含alphanumeric and special characters的任意组合的值。当输入为1) combination of alphanumeric and special characters, and 2) alphanumeric时,我有一个可以正常工作的代码。但是,如果输入包含1) number and special characters ONLY without alphabet or 2) alphabet and special characters ONLY without number的组合,则我的matches出现错误。我想要做的是创建一个matches,它最适合以下输入组合:

1) alphabet+number
2) alphabet+special character
3) alphabet+number+special character
4) number+special character

这是我的代码:
matches: /^(?=.*[0-9]+.*)(?=.*[a-zA-Z]+.*)[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)~!@#%&-=]{8,}$/

我需要你的建议!
谢谢!

最佳答案

这是因为您的积极前瞻要求同时显示[0-9][a-zA-Z]

尝试将其简化为一个前瞻,它仅指定存在[0-9][a-zA-Z]中的至少一个:

matches: /^(?=.*[0-9a-zA-Z])[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)~!@#%&-=]{8,}$/

此外,您可以通过将lookahead中的.*修改为[^0-9a-zA-Z]*来提高正则表达式的效率:这样,lookahead会与它找到的第一个字母数字匹配,然后停止,从而防止不必要的扫描:
matches: /^(?=[^0-9a-zA-Z]*[0-9a-zA-Z])[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)~!@#%&-=]{8,}$/

https://stackoverflow.com/questions/9627991/

相关文章:

grails - 从 map 的特定值的下拉列表中设置值

grails - 在同一个 gsp 页面上使用 3 个布局

grails - 为用户登录插入审核日志记录条目

grails - 标准的单元测试模拟

sql - 将普通 SQL 表添加到 Grails 应用程序而不是使用 ORM?

jquery - “Uncaught ReferenceError: JQueryValidator

grails - User.get()在Grails 2.0中损坏,返回null

grails - Grails url映射从sperate配置文件传递数据

grails - 在运行应用程序完成后,grails应用程序会自动连续自动重新加载

grails - grails g:formatNumber