Как проверить строку на наличие одного или нескольких символов

Многие не определены, но я считаю, что для умного разработчика вам нужно создать новые app_ids для каждого проекта, который вам нужен для подключения facebook. Просто мое мнение. Это также позволяет вам отслеживать множество вещей.

-1
задан peterSO 16 January 2019 в 19:28
поделиться

2 ответа

Поскольку белый список может быть легко определен как регулярное выражение, используйте regexp.MatchString :

package main

import (
    "fmt"
    "regexp"
)

var (
    whitelist  = "A-Za-z0-9"
    disallowed = regexp.MustCompile(fmt.Sprintf("[^%s]+", whitelist))
)

func main() {
    fmt.Println(IsValid("foobar007"))
    fmt.Println(IsValid("foo%bar&007"))
}

func IsValid(s string) bool {
    return !disallowed.MatchString(s)
}

( детская площадка )

0
ответ дан jubobs 16 January 2019 в 19:28
поделиться

В Go напишите простую функцию. Например,

package main

import (
    "fmt"
)

func isStandard(s string) bool {
    for i := 0; i < len(s); i++ {
        switch b := s[i]; {
        case b >= 'a' && b <= 'z':
            continue
        case b >= 'A' && b <= 'Z':
            continue
        case b >= '0' && b <= '9':
            continue
        default:
            return false
        }
    }
    return true
}

func main() {
    fmt.Println(isStandard(`ABCabc123`))
    fmt.Println(isStandard(`#}{&*"(£)`))
}

Детская площадка: https://play.golang.org/p/Y2KjDcHSupH

Вывод:

true
false

Спецификация языка программирования Go

Операторы Switch

Операторы «Switch» обеспечивают многофакторное выполнение. Спецификатор выражения или типа сравнивается с «падежами» внутри «переключателя», чтобы определить, какую ветвь выполнять.

Переключатели выражений

В переключателе выражений вычисляется выражение переключателя, а выражения регистра, которые не должны быть константами, оцениваются слева направо и сверху вниз; первое, равное выражению переключателя, запускает выполнение операторов соответствующего случая; другие дела пропущены. Если ни один регистр не соответствует и существует регистр «по умолчанию», выполняются его операторы. Может быть не более одного случая по умолчанию, и он может появляться где угодно в операторе «switch».

Выражению-переключателю может предшествовать простое выражение, которое выполняется до того, как выражение будет оценено.

Операторы Fallthrough

Оператор «fallthrough» передает управление первому оператору следующего предложения case в выражении «switch». Он может использоваться только как последнее непустое утверждение в таком предложении.


switch b := s[i]; {
    // ...
}

эквивалентно

switch b := s[i]; true {
    // ...
}

эквивалентно

{
    b := s[i]
    switch true {
        // ...
    } 
}

Простое утверждение b := s[i] объявляет b как switch { } Локальная переменная блока операторов.

Выражения случая оцениваются и сравниваются с true. Если ни один из них не соответствует действительности, берется default.

Go, в отличие от C, требует явного fallthrough.

ASCII является подмножеством Unicode UTF-8. Поскольку все стандартные символы являются ASCII, мы можем просто сравнить байты.


Вот простой тест.

Вывод:

$ go test standard_test.go -bench=. -benchmem
BenchmarkPeterSO-8    200000000       8.10 ns/op    0 B/op    0 allocs/op
BenchmarkJubobs-8      10000000     222 ns/op       0 B/op    0 allocs/op
$ 

standard_test.go:

package main

import (
    "regexp"
    "testing"
)

func isStandard(s string) bool {
    for i := 0; i < len(s); i++ {
        switch b := s[i]; {
        case b >= 'a' && b <= 'z':
            continue
        case b >= 'A' && b <= 'Z':
            continue
        case b >= '0' && b <= '9':
            continue
        default:
            return false
        }
    }
    return true
}

func BenchmarkPeterSO(b *testing.B) {
    std := `ABCabc123`
    for N := 0; N < b.N; N++ {
        isStandard(std)
    }
}

var (
    whitelist  = "A-Za-z0-9"
    disallowed = regexp.MustCompile("[^" + whitelist + " ]+")
)

func IsValid(s string) bool {
    return !disallowed.MatchString(s)
}

func BenchmarkJubobs(b *testing.B) {
    std := `ABCabc123`
    for N := 0; N < b.N; N++ {
        IsValid(std)
    }
}
0
ответ дан peterSO 16 January 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: