diff --git a/validator/validator.go b/validator/validator.go index f8aa029..c7433c6 100644 --- a/validator/validator.go +++ b/validator/validator.go @@ -18,6 +18,7 @@ import ( var ( alphaMatcher *regexp.Regexp = regexp.MustCompile(`^[a-zA-Z]+$`) letterRegexMatcher *regexp.Regexp = regexp.MustCompile(`[a-zA-Z]`) + numberRegexMatcher *regexp.Regexp = regexp.MustCompile(`\d`) intStrMatcher *regexp.Regexp = regexp.MustCompile(`^[\+-]?\d+$`) urlMatcher *regexp.Regexp = regexp.MustCompile(`^((ftp|http|https?):\/\/)?(\S+(:\S*)?@)?((([1-9]\d?|1\d\d|2[01]\d|22[0-3])(\.(1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(([a-zA-Z0-9]+([-\.][a-zA-Z0-9]+)*)|((www\.)?))?(([a-z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-z\x{00a1}-\x{ffff}]{2,}))?))(:(\d{1,5}))?((\/|\?|#)[^\s]*)?$`) dnsMatcher *regexp.Regexp = regexp.MustCompile(`^[a-zA-Z]([a-zA-Z0-9\-]+[\.]?)*[a-zA-Z0-9]$`) @@ -111,6 +112,12 @@ func ContainLetter(str string) bool { return letterRegexMatcher.MatchString(str) } + +// ContainLetter check if the string contain at least one number. +func ContainNumber(input string) bool { + return numberRegexMatcher.MatchString(input) +} + // IsJSON checks if the string is valid JSON. // Play: https://go.dev/play/p/8Kip1Itjiil func IsJSON(str string) bool { diff --git a/validator/validator_example_test.go b/validator/validator_example_test.go index 2a9e754..389777f 100644 --- a/validator/validator_example_test.go +++ b/validator/validator_example_test.go @@ -36,6 +36,24 @@ func ExampleContainLetter() { // true } +func ExampleContainNumber() { + result1 := ContainNumber("你好") + result2 := ContainNumber("&@#$%^&*") + result3 := ContainNumber("ab1") + result4 := ContainNumber("1234") + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // false + // false + // true + // true +} + func ExampleContainLower() { result1 := ContainLower("abc") result2 := ContainLower("aBC") diff --git a/validator/validator_test.go b/validator/validator_test.go index b8a3f37..51703c1 100644 --- a/validator/validator_test.go +++ b/validator/validator_test.go @@ -86,6 +86,23 @@ func TestContainLetter(t *testing.T) { assert.Equal(false, ContainLetter("&@#$%^&*")) } +func TestContainNumber(t *testing.T) { + assert := internal.NewAssert(t, "TestContainNumber") + + assert.Equal(true, ContainNumber("123")) + assert.Equal(true, ContainNumber("1Bc")) + assert.Equal(true, ContainNumber("a2c")) + assert.Equal(true, ContainNumber("ab3")) + assert.Equal(true, ContainNumber("a23")) + assert.Equal(true, ContainNumber("a23c")) + assert.Equal(true, ContainNumber("1%%%")) + + assert.Equal(false, ContainNumber("ABC")) + assert.Equal(false, ContainNumber("")) + assert.Equal(false, ContainNumber("你好")) + assert.Equal(false, ContainNumber("&@#$%^&*")) +} + func TestIsJSON(t *testing.T) { assert := internal.NewAssert(t, "TestIsJSON")