2012-05-17 18 views
11

像Python?我試圖檢查字符串中的每個字符是否是字母數字?Ruby不會有isalpha?

+0

我試過谷歌搜索,但沒有找到任何東西。所以我只是想和SO確認一下。 – sivabudh

+1

你可以使用這個正則表達式。 –

+0

好的,謝謝塞爾吉奧。 – sivabudh

回答

19

有一種特殊字符類這樣的:

char.match(/^[[:alpha:]]$/) 

這應該匹配單個字母字符。它似乎也適用於UTF-8。

要測試整個字符串:

string.match(/^[[:alpha:]]+$/) 

請記住,這不佔空間或標點符號。

+0

謝謝。我猜在Ruby中,你必須求助於使用RegEx。 – sivabudh

+0

如果你喜歡塞爾吉奧建議的那種風格,你總是可以添加一個'String#isalpha?'方法。 – tadman

+1

我不知道這是正確的答案。 [[:alpha:]]用於字母表,而OP則要求檢查字母數字字符。 –

17

你可以自己推出:)如果你只想匹配沒有數字的字母,就用alnum替換alpha

class String 
    def alpha? 
    !!match(/^[[:alnum:]]+$/) 
    end 
end 

'asdf234'.alpha? # => true 
'[email protected]#$'.alpha? # => false 
+2

或者更像是ruby-esque:'#alpha?'。 – d11wtq

+0

@ d11wtq:絕對。謝謝:) –

+1

'!self.match(/ [^ [:alnum:]] /)'更簡單。 – steenslag

6

python函數僅適用於ASCII字符; [[:alnum]]正則表達式可以處理「tëst」.alpha? => true。 match/\w/比賽強調,使葉片

def isalpha(str) 
    !str.match(/[^A-Za-z]/) 
end 

重現Python的行爲。

+0

python'isalpha'不支持帶數字的字符串 – Anwar

+0

這將爲空字符串返回true,但應返回false。 – ma11hew28