2017-04-11 197 views
1

我要檢查一個字符串只包含字母,a-zA-Z,數字0-9,和運營商(+=-*/^)檢查字符串是否只包含指定的字符

例如,下面的表達式是允許的:3 + 5(x^2)

對於例如,以下表達式將允許使用而不是3 $+ 5(x^2)

我會使用matches函數來執行此操作嗎?

我想:

// contains only operators, numbers, or letters 
if(!exp.matches("[(+=-*/^)a-zA-Z0-9]")) { 
    return false; 
} 

我也試圖逃避星號,但沒有奏效。

+0

'='和'*'之間的短劃線需要出現在字符類的末尾。 – dasblinkenlight

+0

@dasblinkenlight或者被轉義,這對於將來編輯正則表達式可能不太容易出錯。 – Andreas

+0

非常感謝你! – defoification

回答

3

你應該逃過-或者把它放在字符類的開始/結尾,否則它會創建一個範圍。需要注意的是[=-*]範圍無效

enter image description here

另外,你需要一個量詞,+匹配1個或多個字符,*匹配0或更多。

使用

if(!exp.matches("[a-zA-Z0-9+=*/^()-]+")) { 
     return false; 
} 

如果您不需要匹配(),從字符類中刪除它們。

此外,由於String#matches()需要完整的字符串匹配,所以在正則表達式的開始和結尾處不需要錨點。

+0

非常感謝你! – defoification

+0

並且確保不要先放入'^',因爲它也有特殊含義,就像'-'不是首先或最後一樣。 – Andreas

+0

@Andreas:角色類不是*否定的*,它是積極的。即該模式應該只匹配一個有效的模式。如果字符串與模式不匹配,則返回false。 –

相關問題