如何在正则表达式中替换前瞻?

我写了一个验证输入字符串的正则表达式.它必须至少有8个字符长度(由字母数字和标点字符组成),并且必须至少有一个数字和一个字母字符.所以我想出了正则表达式:
^(?=.*[0-9])(?=.*[a-zA-Z])[a-zA-Z0-9-,._;:]{8,}$

现在我必须用不支持前瞻的语言重写这个正则表达式,我应该如何重写该正则表达式?

有效输入是:

1foo,bar
foo,bar1
1fooobar
foooobar1
fooo11bar
1234x567
a1234567

输入无效:

fooo,bar
1234-567
.1234567
有两种方法.一种是组成一个表达式来处理所有可能的替代方案:
^[a-zA-Z][0-9][a-zA-Z0-9-,._;:]{6,}$
  |
^[a-zA-Z][a-zA-Z0-9-,._;:][0-9][a-zA-Z0-9-,._;:]{5,._;:]{2}[0-9][a-zA-Z0-9-,._;:]{4,}$

这是一个组合的噩梦,但它会起作用.

一种更简单的方法是使用两个表达式两次验证相同的字符串:

^[a-zA-Z0-9-,}$         # check length and permitted characters

[a-zA-Z].*[0-9]|[0-9].*[a-zA-Z]  # check required characters

编辑:@briandfoy正确指出分别搜索每个必需字符会更有效:

[a-zA-Z]                         # check for required alpha

[0-9]                            # check for required digit

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) <script ...