SoFunction
Updated on 2025-03-01

A brief analysis of golang regular expressions

Go (also known as Golang) is a statically strongly typed, compiled language developed by Google's Robert Griesemer, Rob Pike and Ken Thompson. The Go language syntax is similar to C, but its functions include: memory security, GC (garbage collection), structure and CSP-style concurrent calculation.

Robert Griesemer, Rob Pike and Ken Thompson began designing Go in September 2007, and later Ian Lance Taylor and Russ Cox joined the project. Go is developed based on the Inferno operating system. Go was officially announced in November 2009 and became an open source project. It was implemented on Linux and Mac OS X platforms, and later added the implementation under Windows system. In 2016, Go was selected as the "TIOBE Best Language of 2016" by software evaluation company TIOBE. Currently, Go releases a secondary version every six months (i.e. from upgrade to).

Let's take a look at the golang regular expression below.

1 Number: ^[0-9]*$
2 n-digit number: ^\d{n}$
3 Numbers with at least n digits: ^\d{n,}$
4 m-n digit number: ^\d{m,n}$
5 Numbers starting with zero and non-zero: ^(0|[1-9][0-9]*)$
6 Numbers with a maximum of two decimal places starting with non-zero: ^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 Positive or negative numbers with 1-2 decimal places: ^(\-)?\d+(\.\d{1,2})?$
8 Positive, negative, and decimal: ^(\-|\+)?\d+(\.\d+)?$
9 A positive real number with two decimals: ^[0-9]+(.[0-9]{2})?$
10 Positive real numbers with 1 to 3 decimal places: ^[0-9]+(.[0-9]{1,3})?$
11 Nonzero positive integer: ^[1-9]\d*$ or ^([1-9][0-9]*){1,3}$ or ^\+?[1-9][0-9]*$
12 Nonzero negative integer: ^\-[1-9][]0-9"*$ or ^-[1-9]\d*$
13 Non-negative integer: ^\d+$ or ^[1-9]\d*|0$
14 Non-positive integer: ^-[1-9]\d*|0$ or ^((-\d+)|(0+))$
15 Non-negative floating point number: ^\d+(\.\d+)?$ or ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 Non-positive floating point number: ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ or ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 Positive floating point number: ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ or ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 Negative floating point number: ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ or ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 Floating point number: ^(-?\d+)(\.\d+)?$ or ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

2. Verify the expression of character

1 Chinese characters: ^[\u4e00-\u9fa5]{0,}$
2 English and numbers: ^[A-Za-z0-9]+$ or ^[A-Za-z0-9]{4,40}$
3 All characters with length 3-20: ^.{3,20}$
4 A string composed of 26 English letters: ^[A-Za-z]+$
5 A string composed of 26 capital English letters: ^[A-Z]+$
6 A string composed of 26 lowercase English letters: ^[a-z]+$
7 A string composed of numbers and 26 English letters: ^[A-Za-z0-9]+$
8 A string composed of numbers, 26 English letters or underscores: ^\w+$ or ^\w{3,20}$
9 Chinese, English, and numbers include underscores: ^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 Chinese, English, numbers but not underscores and other symbols: ^[\u4E00-\u9FA5A-Za-z0-9]+$ or ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 You can enter characters such as ^%&',;=?$\": [^%&',;=?$\x22]+ 12 It is prohibited to enter characters with ~: [^~\x22]+

3. Special requirements expression

1 Email address: ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2 Domain name: [a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL: [a-zA-z]+://[^\s]* or ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4 Mobile phone number: ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5 Phone Numbers ("XXX-XXXXXXXXX", "XXXX-XXXXXXXXX", "XXX-XXXXXXXXXX", "XXXXXXXXXXXXXX, "XXXXXXXXXXXXXXX): ^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 Domestic phone numbers (0511-4405222, 021-87888822): \d{3}-\d{8}|\d{4}-\d{7}
7 ID number (15 digits, 18 digits): ^\d{15}|\d{18}$
8 Short ID number (number, letter ending x): ^([0-9]){7,18}(x|X)?$ or ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9 Is the account legal (beginning with letters, 5-16 bytes allowed, alphanumeric underscores allowed): ^[a-zA-Z][a-zA-Z0-9_]{4,15}$
10 Password (starting with letters, lengths between 6 and 18, can only contain letters, numbers and underscores): ^[a-zA-Z]\w{5,17}$
11 Strong password (must contain a combination of upper and lower case letters and numbers, special characters cannot be used, the length is between 8-10): ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
12 Date format: ^\d{4}-\d{1,2}-\d{1,2}
13 12 months of a year (01-09 and 1-12): ^(0?[1-9]|1[0-2])$
14 31 days of a month (01-09 and 1-31): ^((0?[1-9])|((1|2)[0-9])|30|31)$
15 money input format:
16 1. There are four forms of money that we can accept: "10000.00" and "10,000.00", and "10,000" without "subdivision":^[1-9][0-9]*$
17 2. This means any number that does not start with 0, but this also means that a character "0" does not pass, so we use the following form: ^(0|[1-9][0-9]*)$
18 3. A 0 or a number that does not start with 0. We can also allow a minus sign to start with: ^(0|-?[1-9][0-9]*)$
19 4. This means a 0 or a number that may be negative and not 0. Let the user start with 0. Remove the negative sign, because money cannot be negative. What we want to add below is the decimal part that explains the possible: ^[0-9]+(.[0-9]+)? $
20 5. It must be noted that there should be at least one digit after the decimal point, so "10." does not pass, but "10" and "10.2" pass: ^[0-9]+(.[0-9]{2})?$
21 6. In this way, we stipulate that there must be two digits after the decimal point. If you think it is too harsh, you can do this: ^[0-9]+(.[0-9]{1,2})?$
22 7. This allows the user to write only one decimal. Now we should consider the commas in the number, we can do this: ^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
23 8.1 to 3 numbers, followed by any comma + 3 numbers, commas become optional, instead of having to: ^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
24 Note: This is the final result. Don't forget that "+" can be replaced with "*" if you think empty strings are acceptable (strange, why?) Finally, don't forget to remove the backslash when using functions. The general errors are here.
25 xml file: ^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
26 Regular expressions of Chinese characters: [\u4e00-\u9fa5]
27 Double-byte characters: [^\x00-\xff] (including Chinese characters, it can be used to calculate the length of the string (one double-byte character length meter 2, ASCII character meter 1))
28 Regular expression for blank lines: \n\s*\r (can be used to delete blank lines)
29 Regular expressions of HTML tags: <(\S*?)[^>]*>.*?|<.*? /> (The version circulated on the Internet is too bad, and the above is only partial, and I still can't do anything about complex nested tags)
30 Regular expressions of the beginning and end whitespace characters: ^\s*|\s*$ or (^\s*)|(\s*$) (can be used to delete whitespace characters at the end of the line (including spaces, tabs, page breaks, etc.), a very useful expression)
31 Tencent QQ number: [1-9][0-9]{4,} (Tencent QQ number starts at 10000)
32 China Postal Code: [1-9]\d{5}(?!\d) (China Postal Code is 6 digits)
33 IP address: \d+\.\d+\.\d+\.\d+ (useful when extracting IP address)
34 IP address: ((?:(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

This is the end of this article about a brief analysis of golang regular expressions. For more related golang regular expression content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!