Я ищу регулярное выражение, которое будет проверять, состоит ли строка только из букв az, numbers, underscore ( _
) и дефиса ( -
). Я пробовал это, но он не работает:
if (!preg_match('/^a-zA-Z0-9_-$/', $string)) { $reg_Error[] = 2; }
Также можно проверить длину с помощью регулярного выражения? Если нет, я просто сделаю это с PHP.
Вы должны поместить ваше регулярное выражение /^a-zA-Z0-9_-$/
в класс символов /[...]/
.
Это означает, что вы можете сопоставить любой символ в классе символов. Вы также должны указать квантификатор, потому что /^[a-zA-Z0-9_-]$/
будет соответствовать только одному символу.
Примеры:
/^[a-zA-Z0-9_-]+$/
с знаком +
вы соответствуете ему один или несколько раз
/^[a-zA-Z0-9_-]{1,}$/
то же, что и выше
/^[a-zA-Z0-9_-]{10,20}$/
между 10 и 20 символами.
/^[a-zA-Z0-9_-]{15}$/
должно быть ровно 15 символов. Вы можете использовать его для проверки длины строки.
Вы также можете использовать следующее ключевое слово, чтобы ваше регулярное выражение было легко читаемым:
/^[\w-]+$/
который соответствует символу слова (включая подчеркивание, буквы и цифры) или тире, одно или несколько раз.
Я бы использовал это:
/^[a-z_\-\d]+$/i
Что касается того, почему я не использую \w
, следующая цитата, взятая из PHP PCRE Pattern Reference , должна объяснить, почему вы не должны использовать \w
в этой ситуации :
Символом «слово» является любая буква или цифра или символ подчеркивания, то есть любой символ, который может быть частью слова «Perl». Определение букв и цифр контролируется таблицами символов PCRE и может варьироваться в зависимости от соответствия языкового соответствия. Например, в «fr» (французском) языке, для символов с акцентом используются некоторые коды символов, превышающие 128, и они сопоставляются символом
\w
.
Это поведение нежелательно в этом случае, поэтому, если вы не хотите беспокоиться о языковой версии, используйте классы с прямым символом вместо сокращения \w
.
Если вы хотите указать минимальную длину (например, 3):
/^[a-z_\-\d]{3,}$/i
Если вы хотите указать как минимальную, так и максимальную длину (например, 2 и 5):
/^[a-z_\-\d]{2,5}$/i
Самый короткий:
/ ^ [\ Ш -] + $ /
Ответы до сих пор правильно объясняют класс символов / ^[A-Za-z0-9_-]+$
/
Вы можете проверить длину. + означает «один или несколько из предшествующих», * означает ноль или более предшествующих слов »и {2,4} означает« от 2 до 4 предыдущих ».
Однако вы не можете указать, что длина должна быть простой. Указание того, что длина должна быть четной, возможна, но нетривиальная: / ^(xx){1,3}$
/ соответствует xx, xxxx или xxxxxx. Здесь счетчик относится к числу пар , а не к числу x'es
Регулярное выражение должно быть: '^ [\ w \ d -] + $'