У меня проблемы с проверкой в PHP, если значение является одной из следующих комбинаций
- буквы (прописные или строчные)
- числа (0-9)
- нижнее подчеркивание (_)
- тире (-)
- точка (.)
- без пробелов! или другие персонажи
несколько примеров:
- ОК: "screen123.css"
- ОК: "screen-new-file.css"
- ОК: "screen_new.js"
- НЕ ОК: "экран новый файл.css"
Думаю, для этого мне нужно регулярное выражение, так как мне нужно выдать ошибку, когда в заданной строке есть другие символы, кроме упомянутых выше.
Ответы:
Шаблон, который вам нужен, выглядит примерно так ( см. Его на 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
preg_match
Примечание по спецификации
Кажется, это соответствует вашей спецификации, но обратите внимание, что это будет соответствовать таким вещам, как
.....
и т. Д., Которые могут или не могут быть тем, что вы хотите. Если вы можете более точно указать, какой шаблон вы хотите сопоставить, регулярное выражение будет немного сложнее.Вышеупомянутое регулярное выражение также соответствует пустой строке. Если вам нужен хотя бы один символ, используйте
+
(один или несколько) вместо*
(ноль или более) для повторения.В любом случае вы можете дополнительно уточнить свою спецификацию (всегда помогает при задании вопроса о регулярном выражении), но, надеюсь, вы также можете научиться писать шаблон самостоятельно, учитывая приведенную выше информацию.
источник
^/([a-zA-Z0-9._-]*\.html)$
/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}[a-zA-Z0-9^]$/
false
к пустым необработанным строковым литералам. Детская площадка . Используйте решение @ nonopolarity ниже .ты можешь использовать
^[\w\d_.-]+$
+
чтобы убедиться , что он имеет , по крайней мере , 1 символ. Нужны^
и$
для обозначения начала и конца, иначе, если строка имеет совпадение в середине, например,@@@@xyz%%%%
тогда это все равно совпадение.источник
-
первый в набор, чтобы не определять диапазон. И\w
охватывает буквенно-цифровые символы и подчеркивание. Так что вам нужно[\w.-]+
.Чтобы на самом деле охватить ваш шаблон, то есть допустимые имена файлов в соответствии с вашими правилами, я думаю, вам нужно немного больше. Обратите внимание, что это не соответствует допустимым именам файлов с точки зрения системы . Это будет зависеть от системы и будет более либеральным в том, что она принимает. Это предназначено для соответствия вашим приемлемым шаблонам.
^([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}
вместо одного или нескольких+
сопоставителей, если это более уместно.$
Сопоставьте конец строки. См. Начальный символ.источник
Это шаблон, который вы ищете
/^[\w-_.]*$/
Что это значит:
^
Начало строки[...]
Подбирайте символы внутри\w
Любой словесный символ так0-9
a-z
A-Z
-_.
Матч-
и_
и.
*
Ноль или более шаблонов или неограниченное количество$
Конец строкиЕсли вы хотите ограничить количество символов:
/^[\w-_.]{0,5}$/
{0,5}
Означает0-5
персонажейисточник
\w
включает_
Что-то вроде этого должно работать
$code = "screen new file.css"; if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code)) { echo "not valid"; }
Это будет эхом "недействительно"
источник
[A-Za-z0-9_.-]*
Это также будет соответствовать пустым строкам, если вы не хотите, чтобы последняя
*
заменялась+
источник