Регулярка: в строке не менее одной буквы

Тема в разделе "Как сделать...", создана пользователем lonejan, 9 фев 2012.

  1. lonejan

    lonejan Постоялец

    Регистр.:
    7 фев 2008
    Сообщения:
    110
    Симпатии:
    10
    Здравствуйте!

    Есть регулярное выражение:
    Код:
    /^[a-zA-Z0-9]{3,64}$/
    Как добавить проверку, чтобы в строке было не менее одной буквы. Например:

    123456789 - не катит
    123s456789 - катит
     
  2. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
  3. lonejan

    lonejan Постоялец

    Регистр.:
    7 фев 2008
    Сообщения:
    110
    Симпатии:
    10
    Это не то, посмотри на регулярку в первом посте.

    Конкретнее: надо чтобы пропускало строки, где есть a-zA-Z0-9, но не менее одной буквы.
     
  4. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    так подойдет? :)
    PHP:
    /[a-z^]+[\d\w]{3,64}/i
     
  5. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Для составления регулярного выражения лучше сначала обдумать что вы хотите описать.
    Потому что в ваших примерах задача неоднозначна. Она может быть описана как: "выражение которое начинается с цифр, затем идёт одна или несколько букв, затем идут снова цифры" или "выражение в котором присутствует хотя бы одна буква".
    Для этих случаев будут разные регулярные выражения. Конкретизируйте задачу, чтобы остальным было легче Вам помочь.
    И чтобы не быть голословным вот регулярки для каждого примера:
    PHP:
    $pattern "/[\d]+[a-zA-Z]+[\d]+/i"//выражение которое начинается с цифр, затем идёт одна или несколько букв, затем идут снова цифры
    $pattern "/.*?[a-zA-Z]+.*?/i"//выражение в котором присутствует хотя бы одна буква
    Вы хотели вначале поставить отрицание в выражении? Я вас правильно понял?
    Тогда скорее будет так:
    PHP:
    $pattern "/[^a-z]+[\w]{3,64}/i";
    Для справки: множество \w включает в себя подмножество \d.
     
  6. lonejan

    lonejan Постоялец

    Регистр.:
    7 фев 2008
    Сообщения:
    110
    Симпатии:
    10
    Видели регулярку в первом посте?:) То же самое, только + должна присутствовать хоть одна буква в проверяемом тексте, неважно в какой части строки.

    Код:
    /[a-z^]+[\d\w]{3,64}/i
    Не работает, пропускает строку вида "$%#$%^$#^#Q123456789"
     
  7. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Тогда просто разбейте строку на 3 части. до буквы, буква, после буквы:
    PHP:
    $pattern '#([a-zA-Z\d]+[a-zA-Z]+[a-zA-Z\d]+){3,64}#i';
    Как-то так...
     
  8. lonejan

    lonejan Постоялец

    Регистр.:
    7 фев 2008
    Сообщения:
    110
    Симпатии:
    10
    Нет мочи больше ждать, обойдусь буквой в начале строки. Сделал так:
    Код:
    /^[a-zA-Z]+[a-zA-Z0-9]*$/
    Скажите как теперь ВСЮ строку ограничить {3,64}

    PS
    Код:
    $pattern = '#([a-zA-Z\d]+[a-zA-Z]+[a-zA-Z\d]+){3,64}#i';
    не работает
     
  9. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Аха, мой косяк) Со круглыми скобками ограничение не работает. Прошу прощения.
     
  10. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    Код:
    [A-z\d]*[A-z]+[A-z\d]*
    проверял на
    Код:
    123456789 - не хавает
     123s456789
     s23456789
     12345678s
     1s3s456789