字符串必须是字母数字验证

时间:2018-02-20 11:13:42

标签: ruby regex

字符串必须包含字母和数字

我试过下面的正则表达式,但它允许我添加特殊字符,我不想要字符串中的任何特殊字符

/^(?=.*[a-z])(?=.*[0-9])/

以下是我的案例

无效

  • 测试
  • TEST
  • 0123
  • T12 ^

有效

  • T123
  • 123T
  • T123
  • 123吨

任何帮助或建议将不胜感激,提前致谢:)

2 个答案:

答案 0 :(得分:3)

您可以使用2个正lookaheads (?=来断言至少有一个字符且至少有一个数字:

^(?=[a-zA-Z0-9]*[a-zA-Z])(?=[a-zA-Z0-9]*\d)[a-zA-Z0-9]*$

或者使用不区分大小写的标记和\d来匹配数字:

^(?=[a-z\d]*[a-z])(?=[a-z\d]*\d)[a-z\d]*$

答案 1 :(得分:0)

看来你想检查一个字符串是否只包含字母和数字,以及至少一个字母和一个数字。

您可以使用我在自由间隔模式下编写的以下正则表达式来使其自我记录。

r = /
    \A                   # match beginning of string
    \p{Alnum}*           # match zero or more letters or numbers
    (?:                  # begin non-capture group
      \p{Alpha}\p{Digit} # match a letter followed by a digit
      |                  # or
      \p{Digit}\p{Alpha} # match a digit followed by a letter
    )                    # end non-capture group
    \p{Alnum}*           # match zero or more letters or numbers
    \z                   # match end of string
    /x                   # free spacing regex definition mode

%w| test TEST 0123 T12^ T123 123T t123 123t |.each { |s| puts "#{s}: #{s.match?(r)}" }
test: false
TEST: false
0123: false
T12^: false
T123: true
123T: true
t123: true
123t: true