正则表达式:检查字符串是否具有1到6位数字,以及恰好4个特殊字符

时间:2019-06-28 08:08:19

标签: html regex

我正在尝试使用正则表达式验证字符串,该字符串必须具有1到6位数字,并且正好是4个特殊字符(我所说的特殊字符是$!^)(“'。英文/拉丁字符可以解释为字母数字,在这种情况下并不重要。

我在HTML输入的pattern属性中使用此正则表达式。

示例:12?74 @“ = 5应该是有效的字符串。

我已经尝试过:

([1-9]{1,6})([@"?']{4})

但是它不能按预期的方式工作,当字符混合时,我无法验证字符串,例如:1254 @@@@是okai,但12 @@'?44无效。

有人可以帮我解决这个问题吗?我是regex的新手,我需要一些帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用

pattern="(?=(?:[^0-9]*[0-9]){1,6}[^0-9]*$)(?=(?:[A-Za-z0-9]*[^A-Za-z0-9]){4}[A-Za-z0-9]*$).*"

请参见regex demo

请注意,HTML5正则表达式会自动用^(?:)$包装,因此生成的模式看起来像

/^(?:(?=(?:[^0-9]*[0-9]){1,6}[^0-9]*$)(?=(?:[A-Za-z0-9]*[^A-Za-z0-9]){4}[A-Za-z0-9]*$).*)$/

详细信息

  • ^-字符串的开头
  • (?=(?:[^0-9]*[0-9]){1,6}[^0-9]*$)-1到6位数字,用字符串中允许的任意数量的非数字分隔
  • (?=(?:[A-Za-z0-9]*[^A-Za-z0-9]){4}[A-Za-z0-9]*$)-除ASCII字母或数字外,正好4个字符,用字符串中允许的任意数量的ASCII字母或数字分隔
  • .*-尽可能多的0+字符(换行符除外)
  • $-字符串的结尾。