正则表达式错误地匹配标点符号(包括空格)

时间:2017-02-23 10:35:59

标签: ruby regex

我正在尝试检查字符串是否包含至少一个小写字母,大写字母和数字,但不包含标点符号(包括空格)。

例如

  • 4aBc8Fk3应匹配
  • 4aBc 8.;3不匹配

我尝试了以下内容,但它匹配空格:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}[^[:punct:]]$

如何不匹配包含空格的标点符号的字符串?

1 个答案:

答案 0 :(得分:2)

根据我的理解,你在那里得到的正则表达式会做以下事情(我不熟悉ruby变种,对于正则表达式我自己还是很新的;这会给你一个想法,但可能不是100 %正确):

  1. 转到字符串的开头
  2. 确保字符串匹配任意数量的任何字符,后跟小写字母,例如--a
  3. 确保字符串匹配任意数字后跟大写字母,例如--aA
  4. 确保字符串匹配任意数字后跟一个数字,例如--aA0
  5. 如果确实如此,请确保字符串的开头后跟至少6个随机字符,例如--aA0-
  6. 确保后面跟着一个非标点字符(虽然这是我不确定的部分,因为我之前没有使用过字符类,也不知道它是[^[:punct:]]还是[^:punct:]),例如--aA0-c
  7. 确保直接跟在字符串的末尾
  8. 现在,前瞻也会允许不同的出现顺序,例如: 0---Aa,只要字符串包含任何字符,后跟他们要查找的内容。

    你可能想要的是^[a-zA-Z0-9]{6,}$,即至少六个字符,字符是字母和数字(例如,这也允许aaaaaa)。

    也许尝试^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{6,}$确保每个群组都存在,并且只获取字母数字字符(至少六个)。

    我总是使用像http://www.regexpal.com/这样的工具慢慢建立我的正则表达式,看看我哪里出错,解构“坏”正则表达式,直到我找到一个“好”的正则表达式,然后慢慢添加到它试。

    希望有所帮助。 :)

    P.S。:我还有点不清楚你想要匹配多少个字符,即字符串是否固定长度......?