我使用jQuery根据我从数组中选择的字母将模式属性添加到文本字段。我尝试使用正则表达式限制文本字段可以接受的值,但它无法正常工作。
我想要的是值的第一个字符必须是我选择的数组字母,然后不要接受超过2个相同的连续字符。
我的正则表达是:
^["+letter+"](?!(.)\1).{2}.*
当我在regexr.com上测试它时它似乎有效,但是当我在我的页面中测试它时,只有匹配的部分第一个字符串工作,其余的没有。当我输入类似" Aaaaron"之类的信息时,"无效输入"没有显示。
提前致谢。
答案 0 :(得分:1)
^(.)(?!\1{2})
此正则表达式将执行以下操作:
注意,要使此表达式将字母的大写和小写版本视为同一字符,您需要使用不区分大小写的标记。
https://regex101.com/r/xG9mE9/2
NODE EXPLANATION
----------------------------------------------------------------------
^ the beginning of a "line"
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
. any character except \n
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
(?! look ahead to see if there is not:
----------------------------------------------------------------------
\1{2} what was matched by capture \1 (2 times)
----------------------------------------------------------------------
) end of look-ahead
----------------------------------------------------------------------
答案 1 :(得分:1)
试试这个正则表达式:(字母为'a')
$("form").find("input[type=text]").attr("pattern", "(?=[Aa])(?!.*(.)\\1\\1).*");
它验证了起始字母,并且没有字符连续出现超过2次:
注释:
\\1
在这种情况下进行反向引用)^
或$
来使输入值仅与整个模式匹配,正则表达式将包含在^(?:regex)$
中。这意味着,如果您的模式不消耗整个字符串,它将无法工作:(?=[Aa])(?!.*(.)\\1\\1)
,这只是几个外观,并且通常会验证输入正常,是零-width模式,最后没有.*
,不起作用。