Регулярное выражение в литералах шаблонов. Экранирующие символы

#javascript #graphql #apollo-server #string-literals #template-literals

#javascript #graphql #apollo-сервер #строковые литералы #литералы шаблона

Вопрос:

Я пытаюсь использовать директиву graphql-constraint-directive с сервером apollo graphql. Мне нужно поставить reg. выражение в литерале шаблона, подобное этому

 const typeDefs =   gql`
input ClaimInput {
  id: String!
  date: String!
  phone: String @constraint(pattern: "^05d([-]{0,1})d{7}$")
  email: String
  invoice: String
  doctorId: String
  therapy: [TherapyInput]
  files: [FileInput]
}
`
  

У меня это не сработало. Нет совпадения. Регулярное выражение правильное. Пример работает с этим @constraint(шаблон: «^[0-9a-zA-Z] $») *.

Итак, я понял, что что-то не так с ^05 d([-]{0,1}) d{7} $ в моем литерале typeDefs шаблона.

Я проверил в Node REPL:

 > v = `^05d([-]{0,1})d{7}$`
'^05d([-]{0,1})d{7}$'
> v = `^05\d([-]{0,1})d{7}$`
'^05\d([-]{0,1})d{7}$'
  

Когда я ставлю d игнорируется.
Когда я ставлю \d, у меня есть \d . Не то, что мне нужно.

Как справиться с этой ситуацией?

Редактирование: я думаю, что проблема в gql с «apollo-server»

Когда я изменил на:

 const typeDefs = gql`

input ClaimInput {
  id: String!
  date: String!
  phone: String @constraint(pattern: "^05\d([-]{0,1})\d{7}$")
  email: String
  invoice: String
  doctorId: String
  therapy: [TherapyInput]
  files: [FileInput]
}
`
  

У меня ошибка:
Ошибка GraphQLError: Синтаксическая ошибка: недопустимая escape-последовательность символов: d .

Когда я изменил на

 const typeDefsRaw = String.raw`
input ClaimInput {
  id: String!
  date: String!
  phone: String @constraint(pattern: "^05d([-]{0,1})d{7}$")
  email: String
  invoice: String
  doctorId: String
  therapy: [TherapyInput]
  files: [FileInput]
}
`
const typeDefs = gql`${typeDefsRaw}`;
  

У меня та же ошибка:
Ошибка GraphQLError: Синтаксическая ошибка: недопустимая escape-последовательность символов: d .

Комментарии:

1. В любом случае, я отправил новую проблему в репозиторий apollo-serve. github.com/apollographql/apollo-server/issues/4727 . Если есть какие-либо обновления, я сообщаю всем

2. почему бы не использовать graphql-constraint-directive ? как это связано с apollo-сервером? почему apollo-server должен исправить некоторые проблемы с расширением?

3. Ошибка @xadm GraphQLError: Синтаксическая ошибка: недопустимая escape-последовательность символов: d. Проблема в gql

4. тогда это должно быть github.com/apollographql/graphql-tag ?

5. ‘// Имена должны совпадать /^[_a-zA-Z][_a-zA-Z0-9]*$/ согласно graphql-js’ >> github.com/confuser/graphql-constraint-directive/blob/master /… … тогда любой экранирование не поддерживается… вы должны ограничить его на уровне распознавателя

Ответ №1:

Вы можете использовать String.raw :

 v = String.raw`^05d([-]{0,1})d{7}$`
  

\d также правильно, если вы не используете / не можете использовать String.raw . Он отображается только как \d , поскольку предварительный просмотр в REPL должен быть копируемой строкой. Если console.log(v) вы увидите только одну обратную косую черту.

Комментарии:

1. Спасибо за быстрый ответ. Я собираюсь проверить это сейчас.

2. Вы правильно ответили. Спасибо. Однако это не решает мою проблему.

Ответ №2:

d означает цифру, поэтому обходным путем было бы использовать [0-9] вместо d .