2013-07-11 11 views
16

W moim schemacie chcę rozpoznać pewne wzorce, aby ograniczyć typ danych, które użytkownik może wprowadzić. Używam wyrażenia regularnego, aby ograniczyć to, co użytkownik może wprowadzić, ale wyrażenie regularne zostanie oflagowane, gdy próbuję sprawdzić poprawność JSON za pomocą walidatora online, takiego jak ten one.Uciekający Regex, aby uzyskać poprawny JSON

Czy istnieje sposób, aby weryfikator zignorował znaki specjalne regex, które nie zgadzają się z nim, ale nadal zachowuje wyrażenie regularne?

Dziwne jest to, że walidator uruchamia się tylko w określonych przypadkach. Na przykład, flagi drugim i nie pierwszy przypadek regex mimo nich jest identyczna tutaj:

  "institutionname": { 
       "type": "string", 
       "description": "institution name", 
       "label": "name", 
       "input-type": "text", 
       "pattern": "^[A-Za-z0-9\s]+$" 
      }, 
      "bio": { 
       "type": "string", 
       "label": "bio", 
       "input-type": "text", 
       "pattern": "^[A-Za-z0-9\s]+$", 
       "help-box": "tell us about yourself" 
      }, 
+1

Musisz uciec przed odwrotnym ukośnikiem poprzedzając go innym odwrotnym ukośnikiem: '"^[A-Za-z0-9 \\ s] + $ "'. JSONLint oznaczył oba wystąpienia, gdy próbowałem. –

+0

Jak bym tego uniknął: "wzorzec": "^ [A-Za-z \ s] + [^ 0-9A-Z + \\\ _ \ - \ ~ \' \! \ @ \ # \ $ \% \^\ & \ * \ (\) \ + \ = \ {\} \ [\] \; \: \ '\ "\ <\> \, \. \? \/\ |] $" – goldisfine

+1

Double escape the all "\\", jak w moim przykładzie. Wiele z tych postaci, które udało ci się uciec, znajduje się w klasie postaci, więc i tak nie musisz uciekać. –

Odpowiedz

15

Jego dopiero ukośniki, które są brudząc się walidacji można je kodować używając %5C który jest kodowanie hex \ albo co Mike W powiedział, że możesz podwoić ucieczkę jak \\, a potem możesz je rozszyfrować, jeśli chcesz z nich korzystać

0

Wiem, że to stare pytanie, ale udostępnimy łatwiejszy sposób na zrobienie tego dla każdego innego który napotyka ten problem.

Zasadniczo innym sposobem jest utworzenie obiektu literowego RegExp, a następnie uzyskanie dostępu do jego właściwości .source.

let pattern = /^[A-Za-z0-9\s]+$/ 
console.log(pattern.source) // '^[A-Za-z0-9\\s]+$' 
Powiązane problemy