Строковый шаблон для проверки первых 8 символов одинаковы в luci - PullRequest
0 голосов
/ 25 апреля 2018

Я использую Luci-Lua в openWRT.Мне нужна функция для проверки поля пароля, которая принимает только буквенно-цифровые символы, и первые 8 символов не совпадают.Пожалуйста, проверьте мой код и помогите мне.

function pw1.validate(self, value)
  if #value <= 6 and not value:find('^[%-%.%w]+$') then
    return nil
  end

  if value:match("^(.)\1*$") then
     return nil
  end

  return value
end

1 Ответ

0 голосов
/ 05 июля 2018

Центральная точка вашего вопроса: вершина вашего вопроса

первые 8 символов не совпадают

Как и предполагалось, это можно сделать с помощьюшаблон Lua (похож на регулярное выражение).Если вы хотите проверить, одинаковы ли первые 8 символов, вы можете использовать

function validate1st8NotSame(value)
    if value:match("^(.)%1%1%1%1%1%1%1") then
      return false
    end
    return true
end

print(validate1st8NotSame("aaaaaaaa")) --not valid
print(validate1st8NotSame("aaaaaaab")) --valid
print(validate1st8NotSame("aaaaaaa")) --!?

Шаблон работает следующим образом:

  • ^(.) захватывает символ в позиции 1,
  • %1%1%1%1%1%1%1 используйте обратную ссылку %1, чтобы проверить повторы захвата 8 раз.

Если вы действительно хотите проверить, не содержат ли первые 8 символов первые 8 символовидентичен символ, тогда необходим более сложный шаблон:

function validate1st8NoSame(value)
    if value:sub(1,8):match("(.).-%1") then
         return false
    end
    return true
end

print(validate1st8NoSame("abcdefghe")) --valid
print(validate1st8NoSame("abcdefgae")) --invalid

Идея здесь такова:

  • value:sub(1,8) получить первые 8 символов
  • (.) захватить один символ
  • .- соответствует кратчайшей возможной последовательности из 0 или более повторений любых символов;
  • %1 обратная ссылка на захваченный символ

Следующее регулярное выражение demo , которое, как мы надеемся, применяет ту же логику, делает более осязаемым.

Пример кода

...