The following are some useful regular expressions that I've developed over time. These expressions assume that the string you are trying to match is complete. Happy parsing!
## Non-alphanumeric
Matches non-alphanumeric characters.
```javascript
([^a-zA-Z\d])+
```
## Time
Matches valid time strings in the format `HH:MM`.
```javascript
(([0-1][0-9])|(2[0-3])):([0-5][0-9])
```
## Phone
Matches phone numbers in the format `(XXX) XXX-XXXX`.
```javascript
\([0-9][0-9][0-9]\) [0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]
```
## Zip Code
Matches zip codes in the format `XXXXX` or `XXXXX-XXXX`.
```javascript
([0-9][0-9][0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9])|([0-9][0-9][0-9][0-9][0-9])
```
## Comments
Matches multi-line comment strings which use `/*` and `*/` as separators, such as in Java.
```javascript
^(/\*)(.*)(\*/)
```
## Number Phrase
Matches numbers which are spelled out in words from zero to ninety-nine.
```javascript
((one)|(two)|(three)|(four)|(five)|(six)|(seven)|(eight)|(nine)|(ten)|(twenty)|(thirty)|(forty)|(fifty)|(sixty)|(seventy)|(eighty)|(ninety))(\-((one)|(two)|(three)|(four)|(five)|(six)|(seven)|(eight)|(nine))){0,1}
```
## Roman Numerals
Matches only Roman numerals from 0 to 39.
```javascript
(X{1,3})(I[XV]|V?I{0,3})|(I[XV]|V?I{1,3})|V
```
## Date
Matches date strings in the format of `YYYY-MM-DD` with support for leap years. I've written a guide on how this expression was derived [here](https://blog.j1.io/matching-valid-date-strings-with-regex/).
```javascript
(([0-9][0-9]((0[48])|([2468][048])|([13579][26])))(-)(((02)(-)((0[1-9])|([1-2][0-9])))|(((0[469])|11)(-)((0[1-9])|([1-2][0-9])|(30)))|(((0[13578])|1[02])(-)((0[1-9])|([1-2][0-9])|(3[0-1])))))|(([0-9][0-9]((0[1235679])|([2468][1235679])|([13579][1345789])))(-)(((02)(-)((0[1-9])|([1-2][0-8])))|(((0[469])|11)(-)((0[1-9])|([1-2][0-9])|(30)))|(((0[13578])|1[02])(-)((0[1-9])|([1-2][0-9])|(3[0-1])))))
```
## Even Parity
Matches numbers which have even parity (numbers whose digits add up to an even number).
```javascript
(([02468]*[13579]){2})*[02468]+
```