Регулярное выражение для проверки поля формы - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть форма с полем особого типа. Это требует проверки.Условия

  1. Он должен содержать как минимум 1 букву. Разрешается использовать как прописные, так и прописные буквы [обязательно]
  2. Может содержать число [необязательно]
  3. Этоможет содержать любой 1 или все 3 из следующих специальных символов дефис (-), амперсанд (&), точка (.) [необязательный]
  4. длина не менее 5 максимум 100
  5. может содержатьпробел между буквами [необязательно]

Я пробовал этот шаблон

/[a-zA-Z0-9]+|[\s]+|[\.]+|[\&]+|[\-]+/

Но он не дает ожидаемого результата.

примеры:

abcd xyz ->must pass test(letter must, 5<characters count<100,space optional)
abcdxyz  ->must pass test(letter must, 5<characters count<100,space optional)
abcd & ->must pass test
abcd1234 ->must pass test
abcd.xyz.12 ->must pass test
123456 ->must fail test(no letters found)
&&&&&&& ->must fail test(no letters found)
&&&--..& ->must fail test(no letters found)
123 abcd.xyz 777-& !$ ->must fail test(!$ are not allowed)

Я могу посчитать длину строки отдельно, но мне нужно регулярное выражение для остальной части.Я использую

str.match(/regex/)

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы можете проверить длину отдельно, это может сделать работу: ^(?:[a-zA-Z0-9 .&-]*)?[a-zA-Z]+(?:[a-zA-Z0-9 .&-]*)?$.Здесь трудно сосчитать, что {5,100} будет проверять количество вхождений подшаблона, а не общее количество найденных им букв.

объяснение (по порядку):

  • начало строки
  • может при желании найти любое количество букв / цифр, а ". & -"
  • должен найти хотя бы одну букву
  • может по выбору найти любое количество букв/ число и ". & -"
  • конец строки

пример адаптирован из Генератор кода Regex101 :

const regex = /^(?:[a-zA-Z0-9 .&-]*)?[a-zA-Z]+(?:[a-zA-Z0-9 .&-]*)?$/;
const strs = [
    'abcd xyz',
    'abcdxyz',
    'abcd &',
    'abcd1234',
    'abcd.xyz.12',
    '123456',
    '&&&&&&&',
    '&&&--..&',
    '123 abcd.xyz 777-& !$'
];
let m, i, l = strs.length;

for(i = 0; i < l; i++){
    if( (m = strs[i].match(regex)) ){
        console.log('Found match: ', m);
    }else{
        console.log('Doesn\'t match: ', strs[i]);
    }
}

ПРИМЕЧАНИЕ : Если вы хотели использовать это для пароля, подобные правила - плохая идея , и теперь официально не рекомендуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...