2017-06-22 2 views
-2

Ich versuche Json-Schema-Definition von unter Schnipsel,Regex \ s Verständnis

"translated_string": { 
    "description": "A translated string", 
    "type": "string", 
    "minLength": 1, 
    "not": { 
     "type": "string", 
     "pattern": "^\\s+$" 
    } 
    }, 

Fragen zu verstehen:

  1. was tut \\s darstellt.

  2. einige Erklärung von Snippet durch einige Beispiele gültiges Schema geben.

+0

'\\ s 'steht für ein [escaped] (https://stackoverflow.com/a/17597400/4607733) Leerzeichen-Metazeichen (siehe [Kürzel Zeichenklassen] (http://www.regular-expressions.info/shorthand.html)). Was kannst du nicht über das Snippet verstehen? – horcrux

+0

@horcrux einige Erklärung von Snippet durch einige Beispiele für gültige Schemas und nicht gültige Schemas –

+0

"^ \\ s + $" ist "Jeder nicht leere String, der nur Leerzeichen ist", aber der Validator nimmt das NICHT davon (so alles ABER das) – Tezra

Antwort

2

In regex Syntax \s ist ein metacharacter ein Leerzeichen darstellt (siehe Shorthand Character Classes). In einigen Sprachen müssen Sie wegen des Schrägstrichs doppelt entkommen (also \\s).

Läßt die Regex analysiert:

  • ^ ist die von dem
  • + ist ein Operator "einer oder mehr", was bedeutet
  • $ ist das Ende der
  • \\s ist die Raum-String beginnen die Zeichenfolge

Also das Patt ern entspricht den Strings, die nur aus mindestens einem Leerzeichen und nichts mehr bestehen.

Lassen Sie uns nun das Snippet analysieren:

  • "description" ist nur die auf die translated_string Eigenschaft
  • "type": "string" bedeutet zugehörige Beschreibung, dass Sie in der JSON nur
  • "not" einen String-Wert für die translated_string Eigenschaft verwenden können bedeutet, dass das Folgende ist nicht zulässig:
    • "pattern": "^\\s+$" ist der regex oben (also muss es nicht angepasst werden)

beachte, dass der Schnipsel entspricht:

"translated_string": { 
    "description": "A translated string", 
    "type": "string", 
    "not": { 
    "type": "string", 
    "pattern": "^\\s*$" 
    } 
}, 

(wo der * Operator bedeutet „Null oder mehr ")
oder sogar einfacher:

(wo \\S ist alles anderes als ein Raum)

Also, die folgenden JSON sind richtig:

"translated_string": "l" 
"translated_string": " l" 
"translated_string": " l " 
"translated_string": " l " 

Während die folgenden JSON sind nicht korrekt:

"translated_string": "" 
"translated_string": " " 
"translated_string": " " 
"translated_string": 1 
"translated_string": [ SOMETHING ] 
"translated_string": { SOMETHING } 
Verwandte Themen