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