Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
196
rated 0 times [  200] [ 4]  / answers: 1 / hits: 63568  / 9 Years ago, sat, august 22, 2015, 12:00:00

I am building a JSON validator from scratch, but I am quite stuck with the string part. My hope was building a regex which would match the following sequence found on JSON.org:



JSON.org



My regex so far is:



/^((?=\)\(|/|\|b|f|n|r|t|u[0-9a-f]{4}))*$/


It does match the criteria with a backslash following by a character and an empty string. But I'm not sure how to use the UNICODE part.



Is there a regex to match any UNICODE character expert or or control character? And will it match a newline or horizontal tab?



The last question is because the regex match the string t, but not (four spaces, but the idea is to be a tab). Otherwise I will need to expand the regex with it, which is not a problem, but my guess is the horizontal tab is a UNICODE character.



Thanks to Jaeger Kor, I now have the following regex:



/^((?=\)\(|/|\|b|f|n|r|t|u[0-9a-f]{4})|[^\]*)*$/


It appears to be correct, but is there any way to check for control characters or is this unneeded as they appear on the non-printable characters on regular-expressions.info? The input to validate is always text from a textarea.



Update: the regex is as following in case anyone needs it:



/^((((?=\)\([\/bfnrt]|u[0-9a-fA-F]{4}))|[^\-x1Fx7F]+)*)$/

More From » json

 Answers
2

For your exact question create a character class


# Matches any character that isn't a  or "
/[^\"]/

And then you can just add * on the end to get 0 or unlimited number of them or alternatively 1 or an unlimited number with +


/[^\"]*/

or


/[^\"]+/

Also there is this below, found at https://regex101.com/ under the library tab when searching for json


/(?(DEFINE)
# Note that everything is atomic, JSON does not need backtracking if it's valid
# and this prevents catastrophic backtracking
(?<json>(?>s*(?&object)s*|s*(?&array)s*))
(?<object>(?>{s*(?>(?&pair)(?>s*,s*(?&pair))*)?s*}))
(?<pair>(?>(?&STRING)s*:s*(?&value)))
(?<array>(?>[s*(?>(?&value)(?>s*,s*(?&value))*)?s*]))
(?<value>(?>true|false|null|(?&STRING)|(?&NUMBER)|(?&object)|(?&array)))
(?<STRING>(?>"(?>\(?>["\/bfnrt]|u[a-fA-F0-9]{4})|[^"\-x1Fx7F]+)*"))
(?<NUMBER>(?>-?(?>0|[1-9][0-9]*)(?>.[0-9]+)?(?>[eE][+-]?[0-9]+)?))
)
A(?&json)z/x

This should match any valid json, you can also test it at the website above


EDIT:


Link to the regex


[#65328] Thursday, August 20, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
mari

Total Points: 305
Total Questions: 100
Total Answers: 98

Location: Somalia
Member since Mon, Feb 27, 2023
1 Year ago
mari questions
Mon, Feb 18, 19, 00:00, 5 Years ago
Wed, Jan 2, 19, 00:00, 6 Years ago
Tue, Dec 25, 18, 00:00, 6 Years ago
;