【问题标题】:Validate that first char has to be integer or letter验证第一个字符必须是整数或字母
【发布时间】:2013-07-31 12:02:31
【问题描述】:

我有这种方法可以“发现”我想要阻止的用户输入。

def has_forbidden_prefix?(string)
  string =~ %r{^(http://|www.)}
end

如果 has_forbidden_​​prefix?是真的,我不想接受输入。

例如:

允许:google.com

不允许:www.google.com、http://google.comhttp://www.google.com

现在我还想在我的方法中检测任何开头的特殊字符。

不允许:.google.com、/google.com、...

我必须在我的正则表达式中包含什么?

【问题讨论】:

  • 我认为您需要添加一些您想要匹配的示例字符串。有点不清楚您是指字符串的第一个字符还是 www 或 http:// 之后的第一个字符。
  • 任何与您的正则表达式匹配的字符串都已经将第一个字符作为字母(假设它不是多行)。
  • 感谢添加了一些示例
  • "google.com" 与您的正则表达式不匹配。

标签: ruby regex validation


【解决方案1】:

判断第一个字符是字母数字还是数字的正则表达式是:

^[a-zA-Z0-9]

其中 ^ 代表应用正则表达式模式的字符串的开头。更多信息请参考http://www.regular-expressions.info/reference.html

【讨论】:

  • 感谢您的解决方案,绝对正确!但我在最初的问题中有一个错误。我已经更新了。
【解决方案2】:

那个正则表达式匹配你想要的previous question

所以你可以扩展

def has_forbidden_prefix?(string)
  disallowed_string = string =~ %r{\A(http://|www)}
  non_alphanumeric = string =~ /\A[^a-zA-Z0-9]/

  disallowed_string || non_alphanumeric
end

【讨论】:

  • 我忘记了第二个正则表达式中的begininning-of-string 说明符(^)!再试一次:)
  • 再次感谢! :-) 但不应该是 0-9 吗?
  • 看来我需要再来一杯咖啡...是的,应该!
  • 这是一个糟糕的解决方案。您使用 2 个正则表达式来完成 1 的工作。另外,@sawa 已经指出区别是没有意义的。
  • 请阅读他之前的问题以了解他想要达到的目标。这是为了验证。使用不同的正则表达式来检查一个正则表达式的不同标准更有意义,因为它更易于维护。
猜你喜欢
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多