mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-09 07:02:29 +08:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b33a9cbfe3 | ||
|
|
9ad9d1805b | ||
|
|
0a1386f5a7 | ||
|
|
b5541ea177 | ||
|
|
578b1bba65 | ||
|
|
3045d56503 | ||
|
|
f1dbd943aa | ||
|
|
e87f3b70f0 |
@@ -6,7 +6,7 @@
|
|||||||
<div align="center" style="text-align: center;">
|
<div align="center" style="text-align: center;">
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/duke-git/lancet/releases)
|
[](https://github.com/duke-git/lancet/releases)
|
||||||
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
||||||
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
||||||
[](https://codecov.io/gh/duke-git/lancet)
|
[](https://codecov.io/gh/duke-git/lancet)
|
||||||
@@ -323,6 +323,7 @@ func HttpPut(url string, params ...interface{}) (*http.Response, error) //http p
|
|||||||
func HttpDelete(url string, params ...interface{}) (*http.Response, error) //http delete request
|
func HttpDelete(url string, params ...interface{}) (*http.Response, error) //http delete request
|
||||||
func HttpPatch(url string, params ...interface{}) (*http.Response, error) //http patch request
|
func HttpPatch(url string, params ...interface{}) (*http.Response, error) //http patch request
|
||||||
func ConvertMapToQueryString(param map[string]interface{}) string //convert map to url query string
|
func ConvertMapToQueryString(param map[string]interface{}) string //convert map to url query string
|
||||||
|
func ParseHttpResponse(resp *http.Response, obj interface{}) error //decode http response to specified interface
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 8. random is for rand string and int generation
|
#### 8. random is for rand string and int generation
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<div align="center" style="text-align: center;">
|
<div align="center" style="text-align: center;">
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/duke-git/lancet/releases)
|
[](https://github.com/duke-git/lancet/releases)
|
||||||
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
[](https://pkg.go.dev/github.com/duke-git/lancet)
|
||||||
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
[](https://goreportcard.com/report/github.com/duke-git/lancet)
|
||||||
[](https://codecov.io/gh/duke-git/lancet)
|
[](https://codecov.io/gh/duke-git/lancet)
|
||||||
@@ -324,6 +324,7 @@ func HttpPut(url string, params ...interface{}) (*http.Response, error) //http p
|
|||||||
func HttpDelete(url string, params ...interface{}) (*http.Response, error) //http delete请求
|
func HttpDelete(url string, params ...interface{}) (*http.Response, error) //http delete请求
|
||||||
func HttpPatch(url string, params ...interface{}) (*http.Response, error) //http patch请求
|
func HttpPatch(url string, params ...interface{}) (*http.Response, error) //http patch请求
|
||||||
func ConvertMapToQueryString(param map[string]interface{}) string //将map转换成url query string
|
func ConvertMapToQueryString(param map[string]interface{}) string //将map转换成url query string
|
||||||
|
func ParseHttpResponse(resp *http.Response, obj interface{}) error //将http响应解码成特定interface
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 8. random随机数处理包
|
#### 8. random随机数处理包
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
package netutil
|
package netutil
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sort"
|
"sort"
|
||||||
@@ -43,6 +45,15 @@ func HttpPatch(url string, params ...interface{}) (*http.Response, error) {
|
|||||||
return request(http.MethodPatch, url, params...)
|
return request(http.MethodPatch, url, params...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseHttpResponse decode http response to specified interface
|
||||||
|
func ParseHttpResponse(resp *http.Response, obj interface{}) error {
|
||||||
|
if resp == nil {
|
||||||
|
return errors.New("InvalidResp")
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
return json.NewDecoder(resp.Body).Decode(obj)
|
||||||
|
}
|
||||||
|
|
||||||
// ConvertMapToQueryString convert map to sorted url query string
|
// ConvertMapToQueryString convert map to sorted url query string
|
||||||
func ConvertMapToQueryString(param map[string]interface{}) string {
|
func ConvertMapToQueryString(param map[string]interface{}) string {
|
||||||
if param == nil {
|
if param == nil {
|
||||||
|
|||||||
@@ -102,3 +102,27 @@ func TestConvertMapToQueryString(t *testing.T) {
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseResponse(t *testing.T) {
|
||||||
|
url := "http://public-api-v1.aspirantzhang.com/users"
|
||||||
|
type User struct {
|
||||||
|
Id int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
}
|
||||||
|
type UserResp struct {
|
||||||
|
Data []User `json:"data"`
|
||||||
|
}
|
||||||
|
resp, err := HttpGet(url)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
userResp := &UserResp{}
|
||||||
|
err = ParseHttpResponse(resp, userResp)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
fmt.Println(userResp.Data)
|
||||||
|
}
|
||||||
|
|||||||
@@ -122,15 +122,15 @@ func Some(slice, function interface{}) bool {
|
|||||||
panic("Filter function must be of type func(int, " + elemType.String() + ")" + reflect.ValueOf(true).Type().String())
|
panic("Filter function must be of type func(int, " + elemType.String() + ")" + reflect.ValueOf(true).Type().String())
|
||||||
}
|
}
|
||||||
|
|
||||||
var indexes []int
|
has := false
|
||||||
for i := 0; i < sv.Len(); i++ {
|
for i := 0; i < sv.Len(); i++ {
|
||||||
flag := fn.Call([]reflect.Value{reflect.ValueOf(i), sv.Index(i)})[0]
|
flag := fn.Call([]reflect.Value{reflect.ValueOf(i), sv.Index(i)})[0]
|
||||||
if flag.Bool() {
|
if flag.Bool() {
|
||||||
indexes = append(indexes, i)
|
has = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return len(indexes) > 0
|
return has
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter iterates over elements of slice, returning an slice of all elements `signature` returns truthy for.
|
// Filter iterates over elements of slice, returning an slice of all elements `signature` returns truthy for.
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import (
|
|||||||
"unicode"
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var isAlphaRegexMatcher *regexp.Regexp = regexp.MustCompile(`^[a-zA-Z]+$`)
|
||||||
|
|
||||||
// IsAlpha checks if the string contains only letters (a-zA-Z)
|
// IsAlpha checks if the string contains only letters (a-zA-Z)
|
||||||
func IsAlpha(s string) bool {
|
func IsAlpha(s string) bool {
|
||||||
pattern := `^[a-zA-Z]+$`
|
return isAlphaRegexMatcher.MatchString(s)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(s)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsNumberStr check if the string can convert to a number.
|
// IsNumberStr check if the string can convert to a number.
|
||||||
@@ -29,10 +29,11 @@ func IsFloatStr(s string) bool {
|
|||||||
return e == nil
|
return e == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isIntStrRegexMatcher *regexp.Regexp = regexp.MustCompile(`^[\+-]?\d+$`)
|
||||||
|
|
||||||
// IsIntStr check if the string can convert to a integer.
|
// IsIntStr check if the string can convert to a integer.
|
||||||
func IsIntStr(s string) bool {
|
func IsIntStr(s string) bool {
|
||||||
match, _ := regexp.MatchString(`^[\+-]?\d+$`, s)
|
return isIntStrRegexMatcher.MatchString(s)
|
||||||
return match
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsIp check if the string is a ip address.
|
// IsIp check if the string is a ip address.
|
||||||
@@ -71,61 +72,61 @@ func IsIpV6(ipstr string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isDnsRegexMatcher *regexp.Regexp = regexp.MustCompile(`^[a-zA-Z]([a-zA-Z0-9\-]+[\.]?)*[a-zA-Z0-9]$`)
|
||||||
|
|
||||||
// IsDns check if the string is dns.
|
// IsDns check if the string is dns.
|
||||||
func IsDns(dns string) bool {
|
func IsDns(dns string) bool {
|
||||||
pattern := `^[a-zA-Z]([a-zA-Z0-9\-]+[\.]?)*[a-zA-Z0-9]$`
|
return isDnsRegexMatcher.MatchString(dns)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(dns)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isEmailRegexMatcher *regexp.Regexp = regexp.MustCompile(`\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*`)
|
||||||
|
|
||||||
// IsEmail check if the string is a email address.
|
// IsEmail check if the string is a email address.
|
||||||
func IsEmail(email string) bool {
|
func IsEmail(email string) bool {
|
||||||
pattern := `\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*`
|
return isEmailRegexMatcher.MatchString(email)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(email)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isChineseMobileRegexMatcher *regexp.Regexp = regexp.MustCompile("^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$")
|
||||||
|
|
||||||
// IsChineseMobile check if the string is chinese mobile number.
|
// IsChineseMobile check if the string is chinese mobile number.
|
||||||
func IsChineseMobile(mobileNum string) bool {
|
func IsChineseMobile(mobileNum string) bool {
|
||||||
pattern := "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$"
|
return isChineseMobileRegexMatcher.MatchString(mobileNum)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(mobileNum)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isChineseIdNumRegexMatcher *regexp.Regexp = regexp.MustCompile(`^[1-9]\d{5}(18|19|20|21|22)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$`)
|
||||||
|
|
||||||
// IsChineseIdNum check if the string is chinese id number.
|
// IsChineseIdNum check if the string is chinese id number.
|
||||||
func IsChineseIdNum(id string) bool {
|
func IsChineseIdNum(id string) bool {
|
||||||
pattern := `^[1-9]\d{5}(18|19|20|21|22)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$`
|
return isChineseIdNumRegexMatcher.MatchString(id)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(id)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var containChineseRegexMatcher *regexp.Regexp = regexp.MustCompile("[\u4e00-\u9fa5]")
|
||||||
|
|
||||||
// ContainChinese check if the string contain mandarin chinese.
|
// ContainChinese check if the string contain mandarin chinese.
|
||||||
func ContainChinese(s string) bool {
|
func ContainChinese(s string) bool {
|
||||||
pattern := "[\u4e00-\u9fa5]"
|
return containChineseRegexMatcher.MatchString(s)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(s)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isChinesePhoneRegexMatcher *regexp.Regexp = regexp.MustCompile(`\d{3}-\d{8}|\d{4}-\d{7}`)
|
||||||
|
|
||||||
// IsChinesePhone check if the string is chinese phone number.
|
// IsChinesePhone check if the string is chinese phone number.
|
||||||
// Valid chinese phone is xxx-xxxxxxxx or xxxx-xxxxxxx
|
// Valid chinese phone is xxx-xxxxxxxx or xxxx-xxxxxxx
|
||||||
func IsChinesePhone(phone string) bool {
|
func IsChinesePhone(phone string) bool {
|
||||||
pattern := `\d{3}-\d{8}|\d{4}-\d{7}`
|
return isChinesePhoneRegexMatcher.MatchString(phone)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(phone)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isCreditCardRegexMatcher *regexp.Regexp = regexp.MustCompile(`^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11}|6[27][0-9]{14})$`)
|
||||||
|
|
||||||
// IsCreditCard check if the string is credit card.
|
// IsCreditCard check if the string is credit card.
|
||||||
func IsCreditCard(creditCart string) bool {
|
func IsCreditCard(creditCart string) bool {
|
||||||
pattern := `^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11}|6[27][0-9]{14})$`
|
return isCreditCardRegexMatcher.MatchString(creditCart)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(creditCart)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isBase64RegexMatcher *regexp.Regexp = regexp.MustCompile(`^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{4})$`)
|
||||||
|
|
||||||
// IsBase64 check if the string is base64 string.
|
// IsBase64 check if the string is base64 string.
|
||||||
func IsBase64(base64 string) bool {
|
func IsBase64(base64 string) bool {
|
||||||
pattern := `^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{4})$`
|
return isBase64RegexMatcher.MatchString(base64)
|
||||||
reg := regexp.MustCompile(pattern)
|
|
||||||
return reg.MatchString(base64)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsEmptyString check if the string is empty.
|
// IsEmptyString check if the string is empty.
|
||||||
|
|||||||
Reference in New Issue
Block a user