Как создать регулярное выражение, запрещающее символы? - PullRequest
0 голосов
/ 19 февраля 2009

У меня вопрос по поводу регулярных выражений в целом. В настоящее время я создаю регистрационную форму, в которой вы можете ввести полное имя (имя и фамилию), однако я не могу использовать [a-zA-Z] в качестве проверки проверки, потому что это исключило бы всех с «чужим» символом. 1001 *

Как лучше всего убедиться, что они не вводят символ, как в php, так и в javascript?

Заранее спасибо!

Ответы [ 7 ]

2 голосов
/ 19 февраля 2009

Правильное решение этой проблемы (в общем): Классы символов POSIX . В частности, вы должны иметь возможность использовать [:alpha:] (или [:alphanum:]) для этого.

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

1 голос
/ 19 февраля 2009

Не думаю, что это хорошая идея. См. Как проверить настоящие имена и фамилии - PHP

1 голос
/ 19 февраля 2009

Если вы строго хотите, чтобы ваше регулярное выражение завершалось с ошибкой в ​​пунктуации и символах, вы могли бы использовать [^[:punct:]], но я не уверен, как класс [:punct:] POSIX реагирует на некоторые странные символы Юникода. Это, конечно, помешало бы кому-то ввести в качестве своего имени «Джон Смайт-Джонс» (так как «-» - знак пунктуации), поэтому я бы, вероятно, посоветовал не использовать его.

1 голос
/ 19 февраля 2009

Сначала нужно концептуально различить «чужой» символ и «символ». Возможно, вам необходимо уточнить здесь.

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

0 голосов
/ 19 февраля 2009

Как уже отмечалось, классы персонажей POSIX, вероятно, являются лучшим выбором. Но детали их поддержки (и альтернативы) очень сильно отличаются от деталей конкретного варианта регулярного выражения.

PHP, очевидно, поддерживает их, но JavaScript поддерживает , а не .

Это означает, что для JavaScript вам нужно будет использовать диапазоны символов: / [\ u0400- \ u04FF] / соответствует любому одному символу кириллицы. Ясно, что это потребует некоторого написания, но в Рекомендацию XML 1.0 (от W3C) включен список многих диапазонов, хотя и несколько лет назад.

Одним из подходов может быть ограниченная проверка клиента в JavaScript и полная проверка только на стороне сервера.

0 голосов
/ 19 февраля 2009

Вы можете перебрать входную строку и использовать функцию String.charCodeAt (), чтобы получить код целочисленного символа для каждого символа. Установите для себя ряд допустимых символов и проведите сравнение.

0 голосов
/ 19 февраля 2009

Я не знаю, как бы вы объяснили, что является действительным или нет, и, в зависимости от вашего глобального охвата, вы, вероятно, не сможете ничего удалить, не заблокировав кого-либо. Но поиск в Google нашел это, что может быть полезным.

http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_symbol_characters_web_page

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