Ruby 使用regex验证用户名

Ruby 使用regex验证用户名,ruby,regex,Ruby,Regex,正在尝试解决regex登录问题。规则如下: 允许的字符有:小写字母、数字、下划线 长度应介于4到16个字符之间 以下是它必须通过的测试用例: Test.describe("Basic tests") do Test.assert_equals(validate_usr('asddsa'), true) Test.assert_equals(validate_usr('a'), false) Test.assert_equals(validate_usr('Hass'), fals

正在尝试解决regex登录问题。规则如下:

  • 允许的字符有:小写字母、数字、下划线
  • 长度应介于4到16个字符之间
以下是它必须通过的测试用例:

Test.describe("Basic tests") do
  Test.assert_equals(validate_usr('asddsa'), true)
  Test.assert_equals(validate_usr('a'), false)
  Test.assert_equals(validate_usr('Hass'), false)
  Test.assert_equals(validate_usr('Hasd_12assssssasasasasasaasasasasas'), false)
  Test.assert_equals(validate_usr(''), false)
  Test.assert_equals(validate_usr('____'), true)
  Test.assert_equals(validate_usr('012'), false)
  Test.assert_equals(validate_usr('p1pp1'), true)
  Test.assert_equals(validate_usr('asd43 34'), false)
  Test.assert_equals(validate_usr('asd43_34'), true)
end
这是我的代码:

def validate_usr(username)
  if (username.length > 3 && username == username.downcase)
    return true
  elsif
    username.include?(" ") == true
    return false 
  else 
    return false
  end
end

遇到了测试用例9的问题,其中涉及到一个空格。它返回
true

测试用例9返回
true
,因为它满足
username.length>3&&username==username.downcase
。请注意,
”。这里的downcase==”

如果username.include?(“”)向上移动
返回false,它应该可以工作。不过,我真诚地建议使用
Regex

def validate_usr(username)
  /\A[a-z0-9_]{4,16}\z/ === username
end

测试用例9返回
true
,因为它满足
username.length>3&&username==username.downcase
。请注意,
”。这里的downcase==”

如果username.include?(“”)
向上移动
返回false,它应该可以工作。不过,我真诚地建议使用
Regex

def validate_usr(username)
  /\A[a-z0-9_]{4,16}\z/ === username
end

你的问题是什么?在编辑和强制你对问题的解释之前,你应该确定他在问什么。你的问题是什么?在编辑和强制你对问题的解释之前,你应该确定他在问什么。如果答案有帮助,不要忘了接受和/或投赞成票;)帮助这里的人们使用
a!~b
,而不是
!!(a=~b)
@Jordan你必须写
!(a!~b)
在这种情况下。我想
!!(a=~b)
看起来更好。但我明白你的意思。如果您将该方法重命名为
reject_usr
或其他名称并返回
a!~那会很好,很简洁。啊,我错了。阅读理解力差——我没有注意到OP声称与
/
相等,而不是真/假。如果答案有帮助,别忘了接受和/或投票赞成;)帮助这里的人们使用
a!~b
,而不是
!!(a=~b)
@Jordan你必须写
!(a!~b)
在这种情况下。我想
!!(a=~b)
看起来更好。但我明白你的意思。如果您将该方法重命名为
reject_usr
或其他名称并返回
a!~那会很好,很简洁。啊,我错了。糟糕的阅读理解力——我没有注意到OP声称与
true
/
false
相等,而不是真/假。