ruby-on-rails - 正则表达式验证用户名至少包含一个字母且没有特殊字符

标签 ruby-on-rails regex

我正在尝试编写具有以下限制的用户名验证:

  • 必须至少包含 1 个字母 (a-zA-Z)
  • 不得包含除数字、字母或下划线以外的任何内容

  • 以下示例有效:abc123、my_name、12345a

    以下示例无效:123456、my_name!、_1235

    我发现了一些关于对字母约束使用正向前瞻的东西:(?=.*[a-zA-Z]),看起来第二个约束可能有某种消极的前瞻,但我不确定如何将它们混合成一个正则表达式。 (注意......我不太清楚 .* 部分在前瞻中的作用......)

    是这样的吗:/(?=.*[a-zA-Z])(?!.*[^a-zA-Z0-9_])/

    编辑:

    因为问题要求使用正则表达式,所以我接受的答案是:
     /^[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$/
    

    但是,我实际上要实现的是 Bryan Oakley 的建议,将其拆分为多个较小的检查。这使得将来在需求发生变化时更容易阅读和扩展。谢谢大家!

    因为我用 ruby​​-on-rails 标记了它,所以我将包含我实际使用的代码:
    validate :username_format    
    
    def username_format
      has_one_letter = username =~ /[a-zA-Z]/
      all_valid_characters = username =~ /^[a-zA-Z0-9_]+$/
      errors.add(:username, "must have at least one letter and contain only letters, digits, or underscores") unless (has_one_letter and all_valid_characters)
    end
    

    最佳答案

    /^[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$/ : 0 个或多个有效字符后跟一个字母,然后是 0 个或多个有效字符,限制为行的开头和结尾。

    关于ruby-on-rails - 正则表达式验证用户名至少包含一个字母且没有特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101628/

    相关文章:

    ruby-on-rails - 如何为集合设置 Rails 表单选择

    ruby-on-rails - 错误 : ERROR: argument of WHERE must be type boolean, 未键入整数

    ruby-on-rails - Ruby on Rails : how to find the slowest tests?

    javascript - 使用正则表达式验证给定的密码不包含字母、数字和特殊字符

    regex - sed 替换,包括换行符

    ruby-on-rails - 以编程方式从 html 中删除图像和视频

    java - 匹配字符序列的正则表达式

    ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践?

    mysql - 我可以使用 Ruby On Rails 连接到 PHPmyadmin 吗?

    python - 如何使用正则表达式从 HTML 网页中提取信息?