如何使用JavaScript检测当前正则表达式中允许的字符?

时间:2010-05-13 12:31:24

标签: javascript regex

在我的Web应用程序中,我创建了一些框架,用于将模型数据绑定到页面上的控件。每个模型属性都有一些规则,如字符串长度,非null和正则表达式。在提交页面之前,框架会使用已定义的规则验证任何绑定控件。

因此,我想检测每个正则表达式规则中允许的字符,如下例所示。

"^[0-9]+$" allow only digit characters like 1, 2, 3.
"^[a-zA-Z_][a-zA-Z_\-0-9]+$" allow only a-z, - and _ characters

但是,此功能不应关心允许字符的分组和定位。它只是讲述了可能的角色。

你有创建这个功能的想法吗?

PS。我知道只允许数字字符创建像数字这样的指定函数很容易。但我需要共享/重用同一段代码,包括数据层(包含所有模型验证器)和UI层,而无需修改任何内容。

感谢

2 个答案:

答案 0 :(得分:0)

我必须承认我正在努力解析你的问题。

如果您正在寻找一个正则表达式,只有当一个字符串完全由某个字符集合组成时才会匹配,无论它们的顺序如何,那么您的字符类示例已经非常接近了。

例如,^[A-Za-z0-9]+$只允许字母A到Z(大写和小写)以及数字,任意顺序和任意长度的字符串。

答案 1 :(得分:0)

对于一般情况,你无法解决这个问题。 Regexps通常不会在特定字符处“失败”,它们只是达到了无法匹配的程度,并且必须回溯以尝试其他匹配方法。

有人可以创建一个正则表达式实现,记住它在回溯之前设置的最远匹配,但大多数实现都没有这样做,包括JavaScript。

可能的前进方式是首先与^pattern$匹配,如果失败则与^pattern匹配而没有结束锚。这样更有可能给你一些字符串左手部分的匹配,所以你可以计算匹配中有多少个字符,并说下面的字符是'无效'。对于更复杂的正则表达式,这会产生误导,但它肯定适用于像[a-zA-Z0-9_]+这样的简单案例。