Вы можете использовать рекурсию для обработки объекта вложенных требований.
function findMissingKeys(obj, keyPath = null, missingKeys = []) {
for(let key in obj) {
if (typeof obj[key] === 'object') {
findMissingKeys(obj[key], key, missingKeys)
} else if (obj[key] === "") {
if (keyPath) {
missingKeys.push(`${keyPath}.${key}`);
} else {
missingKeys.push(key);
}
}
}
return missingKeys
}
function validateDepartment() {
try {
const textArea = document.getElementById("textArea")
const departmentObject = JSON.parse(textArea.value)
const missingKeys = findMissingKeys(departmentObject)
console.log({ missingKeys })
} catch(e) {
alert(e)
}
}
validateDepartment()
<h4>Department Validator</h4>
<textarea id="textArea" cols=50 rows=10>
{
"position": "",
"name": "",
"link": "",
"state": "",
"requirements": {
"age": "",
"citizenship": "",
"degree": ""
},
"salary": "",
"description": ""
}
</textarea>
<hr>
<button onclick="validateDepartment()">
Validate
</button>
ответ: нет
пример: test('[–]', '–')
обратите внимание, что это «дефис», а не дефис - любой не-ASCII символ должен иметь такое же поведение
Основное различие заключается в классах.
Например, U + 00FF - это "ÿ"
, но не символ ASCII. Так что \w
(Соответствует «символу слова» или буквам)
re.search(r'\w', '\xFF') # match
re.search(rb'\w', b'\xFF') # no match
re.search(rb'\w', '\xFF'.encode()) # still no match
(И другие буквы Unicode тоже подойдут)
Если вы посмотрите https: // docs .python.org / 3 / library / re.html , вы можете увидеть три класса, к которым это относится:
\d
Для шаблонов Unicode (str) :
Соответствует любой десятичной цифре Юникода (то есть любому символу в категории символов Юникода [Nd]). Это включает в себя
blockquote>[0-9]
, а также много других цифровых символов. Если используется флагASCII
, сопоставляется только[0-9]
.Для 8-битных (байтовых) шаблонов:
Соответствует символам, которые считаются пробелами в наборе символов ASCII; это эквивалентно
blockquote> blockquote>[ \t\n\r\f\v]
.
\s
Для шаблонов Unicode (str):
Соответствует символам пробела Unicode (который включает в себя
blockquote>[ \t\n\r\f\v]
, а также многие другие символы, например неразрывные пробелы, предписанные правилами типографики во многих языках). Если используется флагASCII
, сопоставляется только[ \t\n\r\f\v]
.Для 8-битных (байтовых) шаблонов:
Соответствует символам, которые считаются пробелами в наборе символов ASCII; это эквивалентно
blockquote> blockquote>[ \t\n\r\f\v]
.
\w
Для шаблонов Unicode (str):
Соответствует символам слов Unicode; это включает в себя большинство символов, которые могут быть частью слова на любом языке, а также цифры и подчеркивание. Если используется флаг
blockquote>ASCII
, сопоставляется только[a-zA-Z0-9_]
.Для 8-битных (байтовых) шаблонов:
Соответствует символам, которые считаются буквенно-цифровыми в наборе символов ASCII; это эквивалентно
blockquote> blockquote>[a-zA-Z0-9_]
. Если используется флагLOCALE
, соответствует символам, которые считаются буквенно-цифровыми в текущей локали и подчеркивании.Таким образом, если вы установите флаг
ASCII
, они должны быть в основном одинаковыми.Для вашей точной функции, пример будет:
test(r'\w|.', '\xFF')