По сути, я хотел проверить имя на основе текста, сначала взятого из файла .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
}
Но когда вместо названия я ввожу «Париж», то по какой-то причине это работает, хотя они должны действовать одинаково. Кто-нибудь знает, что может быть причиной этой проблемы?
Вместо использования console.info(title); зачастую более информативно использовать что-то вроде console.info("<"+title+">");, чтобы были видны любые пробелы и т. д. вокруг заголовка. Согласно @SerajVahadti, на любой стороне строки может быть CR.
Если в вашем data есть новая строка перед Paris, то вы будете проверять пустую строку, что даст вам false.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема, с которой вы столкнулись, скорее всего, связана со скрытыми символами в строке 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(), вы очистите строку, и ваша проверка должна работать как положено!
Спасибо! На самом деле это решило мою проблему. Для меня это должно быть очевидно с самого начала. Но все равно большое спасибо
Я не могу воспроизвести ваши наблюдения, что заставляет меня подозревать, что первая строка вашего
dataимеет либо нулевую ширину, либо пробелы, либо иным образом не буквенно-цифровую.