首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby:如何判断一个字符是字母还是数字?

Ruby:如何判断一个字符是字母还是数字?
EN

Stack Overflow用户
提问于 2013-01-28 03:25:49
回答 3查看 45K关注 0票数 26

这周早些时候,我刚刚开始使用Ruby,我遇到了一些我不太知道如何编码的东西。我正在将一个用Java编写的扫描器转换为Ruby,以便进行类赋值,我已经深入到这一部分:

代码语言:javascript
复制
if (Character.isLetter(lookAhead))
{      
    return id();
}

if (Character.isDigit(lookAhead))
{
    return number();
}

lookAhead是从字符串中挑选出的单个字符(每次循环时移动一个空格),这两个方法确定它是字符还是数字,并返回适当的标记类型。我还没能想出一个与Character.isLetter()Character.isDigit()相当的Ruby。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-28 04:36:51

使用与字母和数字匹配的正则表达式:

代码语言:javascript
复制
def letter?(lookAhead)
  lookAhead.match?(/[[:alpha:]]/)
end

def numeric?(lookAhead)
  lookAhead.match?(/[[:digit:]]/)
end

这些表达式称为POSIX括号表达式,它们的优点是给定类别下的unicode字符将匹配。例如:

代码语言:javascript
复制
'ñ'.match?(/[A-Za-z]/)     #=> false
'ñ'.match?(/\w/)           #=> false
'ñ'.match?(/[[:alpha:]]/)  #=> true

您可以在Ruby’s docs for regular expressions中阅读更多内容。

票数 54
EN

Stack Overflow用户

发布于 2013-01-28 03:30:50

最简单的方法是使用正则表达式:

代码语言:javascript
复制
def numeric?(lookAhead)
  lookAhead =~ /[0-9]/
end

def letter?(lookAhead)
  lookAhead =~ /[A-Za-z]/
end
票数 14
EN

Stack Overflow用户

发布于 2021-01-27 04:16:44

正则表达式在这里有点夸张,它在性能方面要昂贵得多。如果您只需要检查字符是数字还是不是,有一种更简单的方法:

代码语言:javascript
复制
def is_digit?(s)
  code = s.ord
  # 48 is ASCII code of 0
  # 57 is ASCII code of 9
  48 <= code && code <= 57
end

is_digit?("2")
=> true

is_digit?("0")
=> true

is_digit?("9")
=> true

is_digit?("/")
=> false

is_digit?("d")
=> false
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14551256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档