簡體   English   中英

檢查字符串是否以十進制數字開頭?

[英]Check if a string starts with a decimal digit?

看起來以下作品,這是一個好方法嗎?

var thestr = "192.168.0.1"
if (thestr[0]>= '0' && thestr[0] <= '9'){
    //...
}

您的解決方案是完全可以的。

但是請注意,Go中的字符串以只讀字節片的​​形式存儲,其中字節是UTF-8編碼的字節序列,對字符串進行索引將對其字節進行索引,而不對其符文(字符)進行索引。 但是由於十進制數字( '0'..'9' )恰好有一個字節,因此在這種情況下可以測試第一個byte ,但是首先您應該測試len(s) > 0s != ""

這是其他一些選擇,請在Go Playground上全部嘗試:

1)測試字節范圍:

這是您的解決方案,可能是最快的解決方案:

s := "12asdf"
fmt.Println(s[0] >= '0' && s[0] <= '9')

2)使用fmt.Sscanf()

注意:這也接受string是否以負數開頭,確定對您來說是否有問題(例如,接受"-12asf" )。

i := 0
n, err := fmt.Sscanf(s, "%d", &i)
fmt.Println(n > 0, err == nil) // Both n and err can be used to test

3)使用unicode.IsDigit()

fmt.Println(unicode.IsDigit(rune(s[0])))

4)使用regexp

我可能永遠不會使用它,因為這是迄今為止最慢的,但是這里是:

r := regexp.MustCompile(`^\d`)
fmt.Println(r.FindString(s) != "")

要么:

r := regexp.MustCompile(`^\d.*`)
fmt.Println(r.MatchString(s))

請不要將regexps用於該簡單任務:)

在這種情況下,我將更改以下內容:

由於您是按字符進行比較,並且沒有字符在1到9之間,因此我認為您的解決方案是可以的,但它不能解決后面的其他數字。

例如,如果thestr"192.something.invalid"則它不再是IP。

我建議使用正則表達式來檢查IP。

就像是

\b(?:\d{1,3}\.){3}\d{1,3}\b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM