代码之家  ›  专栏  ›  技术社区  ›  Soul_Master

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

  •  0
  • Soul_Master  · 技术社区  · 16 年前

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

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

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

    但是,这个函数不应该关心分组、允许字符的位置。它只显示可能的字符。

    您对创建这个函数有什么想法吗?

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

    谢谢

    2 回复  |  直到 16 年前
        1
  •  0
  •   bobince    16 年前

    一般情况下你不能解决这个问题。regexp通常不会在特定字符处失败,它们只会到达一个不再匹配的点,并且必须回溯以尝试另一种匹配方法。

    我们可以让一个regex实现记住在回溯之前它所能匹配的最远的部分,但是大多数实现都不这样做,包括javascript。

    一种可能的前进方式是先敌 ^pattern$ 如果那场比赛失败 ^pattern 没有端锚。这更有可能为您提供字符串左侧部分的某种匹配,因此您可以计算匹配中有多少个字符,并说以下字符是__invalid_。对于更复杂的regexp,这可能会产生误导,但对于像 [a-zA-Z0-9_]+ .

        2
  •  0
  •   Tim Pietzcker    16 年前

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

    如果您正在寻找一个正则表达式,该表达式仅在字符串完全由特定的字符集合组成时匹配,而不管它们的顺序如何,那么您的字符类示例已经非常接近了。

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