Регулярное выражение для букв, цифр и - _ - программирование
Подтвердить что ты не робот

Регулярное выражение для букв, цифр и - _

У меня возникла проблема с проверкой на PHP, если значением является любая из следующих комбинаций

  • буквы (верхний или нижний регистр)
  • числа (0-9)
  • подчеркивание (_)
  • тире (-)
  • точка (.)
  • Без пробелов! или другие символы

несколько примеров:

  • ОК: "screen123.css"
  • OK: "screen-new-file.css"
  • ОК: "screen_new.js"
  • НЕ ОК: "screen new file.css"

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

4b9b3361

Ответ 1

Образец, который вы хотите, похож на (см. его на rubular.com):

^[a-zA-Z0-9_.-]*$

Пояснение:

  • ^ - это начало привязки строки
  • $ - это конец привязки строки
  • [...] - это определение класса символов
  • * - повторение "нуль или больше"

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

Ссылки


В PHP

Вот фрагмент, чтобы показать, как вы можете использовать этот шаблон:

<?php

$arr = array(
  'screen123.css',
  'screen-new-file.css',
  'screen_new.js',
  'screen new file.css'
);

foreach ($arr as $s) {
  if (preg_match('/^[\w.-]*$/', $s)) {
    print "$s is a match\n";
  } else {
    print "$s is NO match!!!\n";
  };
}

?>

Вышеприведенные отпечатки (как видно на ideone.com):

screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!

Обратите внимание, что шаблон немного отличается, используя \w. Это класс символов для "символа слова".

Ссылки API


Примечание по спецификации

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

Вышеупомянутое регулярное выражение также соответствует пустой строке. Если вам нужен хотя бы один символ, используйте + (один или более) вместо * (ноль или более) для повторения.

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

Ответ 2

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

^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

Пояснение:

  • ^ Соответствует началу строки. Это (плюс конечное совпадение) заставляет строку соответствовать точному выражению, а не просто содержать подстроку, соответствующую выражению.
  • ([a-zA-Z0-9]+[_-])* Нуль или более случаев одной или нескольких букв или цифр, за которыми следует символ подчеркивания или тире. Это приводит к тому, что все имена, содержащие тире или подчеркивание, имеют буквы или цифры между ними.
  • [a-zA-Z0-9]+ Одна или несколько букв или цифр. Это охватывает все имена, которые не содержат подчеркивания или тире.
  • \. Литральный период (точка). Заставляет имя файла иметь расширение и, исключая из остальной части шаблона, разрешать использовать период между именем и расширением. Если вам нужно больше одного расширения, которое можно было бы обработать, используя тот же метод, что и для тире/подчеркивания, просто в конце.
  • [a-zA-Z0-9]+ Одна или несколько букв или цифр. Расширение должно иметь длину не менее одного символа и содержать только буквы и цифры. Это типично, но если вы хотите разрешить подчеркивание, это также можно решить. Вы также можете указать диапазон длины {2,3} вместо одного или более совпадений +, если это было более уместно.
  • $ Сопоставьте конец строки. См. Начальный символ.

Ответ 3

вы можете использовать

^[\w\d_.-]+$

the + должен удостовериться, что он имеет как минимум 1 символ. Нужны ^ и $ для обозначения начала и конца, иначе, если строка имеет совпадение в середине, например @@@@xyz%%%%, то она по-прежнему соответствует.

Ответ 4

Что-то вроде этого должно работать

$code = "screen new file.css";
if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code))
{
    echo "not valid";
}

Это будет звучать "недействительно"

Ответ 5

[A-Za-z0-9_.-]*

Это также будет соответствовать пустым строкам, если вы не хотите, чтобы обменять последний * на +