По сути, я хотел проверить имя на основе текста, сначала взятого из файла .txt, а затем разделенного. Текст выглядит примерно так:
Paris
Museum
1
...
и код выглядит так:
const handleValidation = (data:string) => {
let pattern = /^[a-zA-Z0-9]{1,10}$/;
let title = data.split('\n')[0];
console.info(title); // returns "Paris" and is a string
console.info(pattern.test(title)); // returns false
console.info(pattern.test("Paris")); // returns true
}
Но когда вместо названия я ввожу «Париж», то по какой-то причине это работает, хотя они должны действовать одинаково. Кто-нибудь знает, что может быть причиной этой проблемы?
🤔 А знаете ли вы, что...
JavaScript имеет множество библиотек и фреймворков, таких как jQuery, Angular, и Vue.js.
Проблема, с которой вы столкнулись, скорее всего, связана со скрытыми символами в строке title
, когда вы читаете ее из файла. Несмотря на то, что это выглядит как "Paris"
, могут быть дополнительные символы, такие как возврат каретки (\r
), конечный пробел или что-то подобное, что приводит к сбою проверки.
Вот почему это происходит:
split('\n')
, она разрывается на символе новой строки, но любые дополнительные символы, такие как \r
(распространенный в Windows) или пробелы, все равно могут быть присоединены к title
.pattern.test(title)
, возвращается false
, потому что title
не совсем "Paris"
— это что-то вроде "Paris\r"
или "Paris "
.Просто обрежьте строку title
, чтобы удалить ненужные символы:
const handleValidation = (data: string) => {
let pattern = /^[a-zA-Z0-9]{1,10}$/;
let title = data.split('\n')[0].trim(); // .trim() removes extra spaces and characters
console.info(title); // now this should print exactly "Paris"
console.info(pattern.test(title)); // and this should return true
}
Используя .trim()
, вы очистите строку, и ваша проверка должна работать как положено!