Как исправить этот шаблон электронной почты JSON - PullRequest
1 голос
/ 18 апреля 2019

Я создаю коллекцию USER, где его просят добавить поле электронной почты.

Это то, что у меня есть в коллекции валидации.

db.createCollection("user", {
validator: {
    $jsonSchema : {
        bsonType: "object", 
        required: ["email"],
    properties: {
        "email": {type: "string", pattern: "^(\\([a-z] {30}\\))?[a-z]{30}@[.]$"}
}}}})

Я ожидаю, что MongoDB примет электронную почту в формате "email@email.com".Проверка не позволяет такой шаблон.

WriteResult({
"nInserted" : 0,
"writeError" : {
    "code" : 121,
    "errmsg" : "Document failed validation"
}})

Ответы [ 3 ]

2 голосов
/ 18 апреля 2019

Я ожидаю, что MongoDB примет электронную почту в формате "email@email.com"

Технически, это ADDR_SPEC , а не адрес электронной почты, так что слава за разъяснение того, о чем вы спрашиваете. Даже если вы говорите только об одном SMTP ADDR_SPEC (есть другие виды адресов электронной почты), синтаксис все равно очень гибкий .

Хотя вы можете использовать универсальное решение ( это работает для большинства случаев), вы, вероятно, захотите исключить цитируемые имена почтовых ящиков, исключить числовые IP-адреса и потребовать полное имя DNS, следовательно, что-то по строки:

/[a-z0-9\._%+!$&*=^|~#%{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,22})/

(и вы, возможно, захотите добавить якоря, чтобы запретить ведущие / тренировочные пробелы, если вы не обрезаете строку в другом месте)

(но учтите, что это не доказывает, что адрес имеет запись MX, а также что SMTP-сервер по этому адресу будет принимать электронные письма для почтового ящика или что лицо, предоставляющее данные, контролирует почтовый ящик)

1 голос
/ 18 апреля 2019

Во-первых, вам, вероятно, следует использовать регулярное выражение вместо строки при создании валидатора. См. этот документ, он не очень хорошо задокументирован, но в разделе «Выражения запросов» приведен пример, показывающий, как определить проверку регулярных выражений.

Вам также следует учитывать, что проверка электронной почты является довольно сложной операцией, и большинство, если не все регулярные выражения, всегда отфильтровывают действительные электронные письма. Обычно при проверке электронной почты вы должны выбирать более защищенный подход, чтобы не потерять действительные электронные письма.

Вы можете найти список регулярных выражений электронной почты здесь и выбрать тот, который лучше всего соответствует вашим потребностям

0 голосов
/ 18 апреля 2019

Ваш шаблон не проверяет электронную почту, вы можете проверить его на

https://regex101.com/

используйте это регулярное выражение = ^ \ w + @ [a-zA-Z_]+ ?. [a-zA-Z] {2,3} $ в шаблоне

надеюсь, это поможет

...