Белый список регулярных выражений для проверки ввода - без учета акцента - PullRequest
2 голосов
/ 14 апреля 2011

Я хотел бы иметь возможность ограничить ввод пользователя белым списком допустимых символов, но я не хочу препятствовать регистрации людей из других культур.Пока что у меня есть это:

^[a-zA-Z0-9èéêëàáâãäçìíîïòóôõöùúûü-_]*$

Это допускает большинство французских акцентов, но список акцентов в латинском наборе символов IMMENSE!Я бы предпочел использовать белый список вместо черного, если я что-то упустил.

Примечание , это будет для C #, но я бы хотел использовать регулярное выражение для клиентапроверка стороны должна быть последовательной с обеих сторон.Я зашифровываю вводимые данные в формате HTML, когда сохраняю их в базу данных.

Существует ли более элегантный способ сделать нечувствительным к регулярному выражению ударение, но все же достаточно ограничительным, чтобы предотвратить XSS?Я не хочу отчуждать своих пользователей.

Я хотел бы иметь возможность использовать пунктуацию, но не открывать себя для атак XSS, например, я хочу, чтобы кто-то вводил название их компании: если кто-то работалв Yahoo !, они должны иметь возможность зарегистрироваться.

Ответы [ 6 ]

2 голосов
/ 28 мая 2011

fwiw: я использую функцию домашнего приготовления, которая возвращает RegExp для всех диакритических знаков:

function diacritsRegEx(global, caseinsitive, multiline){
        var modifiers =   (global       ? 'g' : '') 
                        + (multiline    ? 'm' : '')
                        + (caseinsitive ? 'i' : ''); 
        return new RegExp(
             ['[\\.\\-a-z\\s]|',            // [a-z, . - and space]
              '[\\300-\\306\\340-\\346]|',  // all accented A, a
              '[\\310-\\313\\350-\\353]|',  // all accented E, e
              '[\\314-\\317\\354-\\357]|',  // all accented I, i
              '[\\322-\\330\\362-\\370]|',  // all accented O, o
              '[\\331-\\334\\371-\\374]|',  // all accented U, u
              '[\\321-\\361]|',             // all accented N, n
              '[\\307-\\347]'               // all accented C, c
             ]
             .join(''), modifiers);
}
2 голосов
/ 14 апреля 2011

Может быть, вы могли бы использовать диапазон Юникода, например [\ u00C0- \ u017E], возможно, охватывает все основы для акцента (но вы должны проверить карту символов, чтобы убедиться, поскольку я не знаю, какие акценты есть в итальянском языке).

1 голос
/ 28 мая 2011

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

^[\w_-]+$

, где \ w обозначает любую букву, а _- это две разрешенные дополнительные пунктуации. Не забудьте поставить - в конце используется.

1 голос
/ 14 апреля 2011

В некоторых реализациях регулярных выражений простой \w будет охватывать все это. См. http://www.regular -expressions.info / charclass.html

1 голос
/ 14 апреля 2011
^\w+$

Не могли бы вы просто использовать буквенно-цифровой флаг, я считаю, что принимает акценты.

0 голосов
/ 26 марта 2013

Для пользовательского ввода в форме заказа я использую это: [^ \ w \ s + \ /_,.@-] Это позволяет символы для электронных писем, почтовых индексов, имени, фамилии и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...