Проверка данных формы с помощью регулярных выражений - PullRequest
1 голос
/ 30 августа 2011

Я самый новый и счастлив быть здесь, в Stackoverflow. Я давно слежу за этим сайтом.

У меня есть поле ввода / текста. (например, «Укажите свое имя»)

Скрипт запускает следующие элементы управления, когда пользователь отправляет данные:

1) Контроль, является ли поле пустым или нет.

2) Контролирует, должно ли поле превышать максимально допустимое количество символов.

3) Контроль, содержит ли поле неправильное регулярное выражение preg_match. (например, он содержит цифры, а не только буквы - без символов и ударений -).

Вопрос в следующем: почему, если я поставлю эти символы "w /", скрипт не сделает управление? И кажется, что управление строкой обхода?


Привет всем, ребята, и извините, если я опоздал с ответом (а также за не-код, размещенный ^^).

Теперь поговорим о моей проблеме. Я проверил, что проблема только, если я работаю в автономном режиме (я использую EasyPhp 5.3.6.1). В противном случае, онлайн-тестирование RegEx в порядке.

Это код, который я использую, чтобы получить только то, что я сказал выше:

    if (!preg_match('/^[a-zA-Z]+[ ]?[a-zA-Z]+$/', $name)) {

         echo "Error";

    }

Как видите, этот код соответствует:

  • Строка, которая начинается (и заканчивается) только буквами;
  • Строка с только 0 или 1 пустым пробелом (для лиц с двумя именами, т. Е. Анна Мария);

... да?!

(Пожалуйста, поправьте меня, если я ошибаюсь)

Спасибо всем!

Бородавки

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Мое чтение требований:

  • Можно указывать только буквы (верхние или нижние).
  • Что-то должно быть предоставлено (то есть строка ненулевой длины).
  • Существует максимальная длина.

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

<?php

$max    = 10;
$string = 'w/';

// Check only letters; the regex searches for anything that isn't a plain letter
if (preg_match('/[^a-zA-Z]/', $string)){
    echo 'only letters are allowed';
} 

// Check a value is provided
$len = strlen($string);
if ($len == 0) {
    echo 'you must provide a value';
}

// Check the string is long to long
if ($len > $max) {
   echo 'the value cannot be longer than ' . $max;
}
2 голосов
/ 30 августа 2011

Вы также можете попробовать это:

if (preg_match('/^[a-z0-9]{1,12}/im', $subject)) {
    \\ match
}

Вышеуказанное будет совпадать только с постом @genesis ', но будет совпадать только в том случае, если длина $ subject составляет от 1 до 12 символов включительно.Регулярное выражение также нечувствительно к регистру.

0 голосов
/ 30 августа 2011

Работает нормально.

<?php
$string = '\with';
if (preg_match('~[^0-9a-z]~i', $string)){
    echo "only a-Z0-9 is allowed"; //true
}

http://sandbox.phpcode.eu/g/18535/3

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

...