2009-11-22 4 views
4

Я хочу принять список символов в качестве ввода от пользователя и отказаться от остальных. Я могу принять форматированную строку или найти, если символ/строка отсутствует. Но как я могу принять только набор символов, в то время как отклонять все остальные символы. Я хотел бы использовать preg_match для этого.PHP Regular Expression [принимать только выбранные символы]

например. Допустимыми символами являются: a..z, A..Z, -, '' Пользователь должен иметь возможность вводить эти символы в любом порядке. Но они не должны допускать использования, кроме этих символов.

ответ

8

Используйте отрицанием класс символов: [^ A-Za-z- \ ш]

Это будет соответствовать только если пользователь вводит что-то кроме того, что в этом классе символов.

if (preg_match('/[^A-Za-z-\w]/', $input)) { /* invalid charcter entered */ } 
+0

Спасибо. Не могли бы вы объяснить \ w – Sadi

+0

Это для стандартных слов. Я использую его вроде как избыточно. Я считаю, что это соответствует [A-Za-z0-9_] (все буквы, цифры и подчеркивание), если я не ошибаюсь. – Matt

+0

@Matt Да, это все. :) Спасибо – Sadi

2

[A-Za-Z- \ ш]

скобки [] используются для группировки символов и ведут себя как один символ. так что вы также можете делать такие вещи, как [...] + и т. д. также az, AZ, 0-9 определяют диапазоны, поэтому вам не нужно писать весь алфавит

+0

+1 за скобках [] :) – Sadi

+1

ой, и вы можете также использовать \ S, чтобы соответствовать пробельные символы (пробел, табуляция, перевод строки и так далее) – Zenon

1

Вы можете использовать следующее регулярное выражение: ^[a-zA-Z -]+$.

^ соответствует началу строки, которая мешает ей совместить середину строки 123abc. $ аналогичным образом совпадает с концом строки, предотвращая совпадение середины abc123.
Скобки соответствуют каждому символу внутри них; a-z означает каждый символ между a и z. Чтобы соответствовать самому символу -, поместите его в конец. ([19-] соответствует 1, a 9 или -; [1-9] соответствует каждому символу между 1 и 9 и не соответствует -).
+ сообщает, что он соответствует одному или нескольким вещам перед ним. Вы можете заменить + на *, что означает 0 или более, если вы также хотите сопоставить пустую строку.

Для получения дополнительной информации см. here.

+0

@ Matt: Я хорошо осведомлен о том, что , Подумайте дважды, прежде чем свалить. – SLaks

+0

@SLaks Информативный, хотя и не совсем ответ. +1 :) Спасибо – Sadi

0

Вы будете смотреть на отрицается ^ персонажа класса [], который предусматривает ваши допустимые символы, то тест на матчи.

$pattern = '/[^A-Za-z\- ]/'; 
if (preg_match($pattern, $string_of_input)){ 
    //return a fail 
} 

//Matt beat me too it... 
Смежные вопросы