2015-04-26 3 views
3

Я искал 2 часа, и я до сих пор не понимаю. Мне нужно оценить ввод имени учетной записи. Это может ТОЛЬКО содержать цифры (0-9), буквы (a-z и A-Z) и точку (.).php preg_match только цифры, буквы и точки

Все остальное запрещено. Таким образом, нет подчеркивания (_), плюс (+) и так далее.

Правильные счета должны выглядеть, например .:

john.green 
luci.mayer89 
admin 

Я пробовал много примеров preg_match/регулярное выражение, но я не получить работу. Всякий раз, когда я делаю echo preg_match(...), я получаю 1 как true.

$accountname = "+_#luke123*"; 
echo preg_match("/[a-z0-9.]/i", $accountname); 

//--> gives back 1 as true 

Кроме того, было бы здорово, чтобы контролировать, что имя учетной записи начинается с по крайней мере 2 букв или цифр, и заканчивается, по крайней мере 1 буква или цифра - но я далеко, далеко от этого.

ответ

5

Вы должны использовать анкеры и квантор:

echo preg_match("/^[a-z0-9.]+$/i", $accountname); 

Ваша строка +_#luke123* содержит буквы и цифры, таким образом, есть совпадение. Если мы укажем движку только совпадение всей строки с начала (^) до конца ($), мы сделаем так, чтобы это не соответствовало. + обеспечивает захват не только 1, но и всех персонажей.

См. this demo, теперь нет совпадения!

EDIT: Поскольку вы также должны проверить эти условия:

строка должна начинаться с 2-х или более букв или цифр и заканчиваются 1 или больше букв или цифр

Я могу предложить это ^[a-z0-9]{2,}[a-z0-9.]*[a-z0-9]+$ regex (должно использоваться с опцией i), что означает:

  • Запуск с 2 или более букв или цифр
  • затем следовать любое количество цифр, букв или периодов
  • и заканчивается в 1 или более букв или цифр.

Another demo

+0

идеально !!! THX для объяснения! теперь я понимаю смысл^и $. Можете ли вы также помочь мне со второй частью? строка должна начинаться с двух или более букв или цифр и заканчиваться 1 или более буквами или цифрами (например, lu.b хорош, но «a.» или «.abc» должен завершиться с ошибкой)? – Lox

+0

Возможно, этот '^ [a-z0-9] {2,} [a-z0-9.] * [A-z0-9] + $' (должен использоваться с опцией 'i') - это то, что вы находясь в поиске? Начинается с 2 или более букв или цифр, затем любое количество цифр, букв или периода; и заканчивается на 1 или более букв или цифр. https://regex101.com/r/fL6qY7/3 –

+0

Я попробовал это и, похоже, работает: '^ [a-z0-9] {2} [a-z0-9.] {0,} [a-z0-9] {1} + $ ' – Lox

Смежные вопросы