მინდა დავწერო რეგულარული გამოხატულება Javascript-ში, რომელიც შეამოწმებს, არსებობს თუ არა ყველა აღნიშნული სიმბოლო მინიმუმ ერთხელ
მე მაქვს სტრინგი s და საჭიროა შევამოწმო, შეიცავს თუ არა ეს სტრინგი თითოეულ ალფავიტს a-დან z-მდე. რა იქნება რეგექსი ამ პირობის შესამოწმებლად? სადაც s შეიძლება იყოს ძალიან დიდი სტრინგი, მრავალსიტყვიანი, სიტყვებით გამოყოფილი.
მაგალითი :
pattern.test("zy aemnofgbc jkhil pqasdfrs tuvrhfwx")
მინიმუმ ერთხელ შეიცავს ყველა a-z ანბანს, ამიტომ უნდა დააბრუნოს true.
pattern.test("sdfasbcd effsdgh ijsfghtkl mnhtop qrsjht uvwmnmx yfdhjkd")
უნდა დააბრუნოს false, რადგან ის არ შეიცავს სიმბოლოს z.
ოპტიმალური გადაწყვეტილების ძიება.
უპასუხე #1
ყველაზე მარტივი გზა არის უნიკალური სიმბოლოების გამოყოფით
function testAlphabet(str) {
var chars = str.replace(/[^a-z]/g).split(''); // it may need to convert to lowercase
// remove duplicate
chars = [...new Set(chars)];
console.log(chars.join('').length == 26)
}
testAlphabet("zy aemnofgbc jkhil pqasdfrs tuvrhfwx")
testAlphabet("sdfasbcd effsdgh ijsfghtkl mnhtop qrsjht uvwmnmx yfdhjkd")პასუხი #2
პირველი გამოსავალი regex-ით - აცილებს ყველა არა-ალფაბეტურ სიმბოლოს, დუპლიკატებს და ადარებს სტრინგის სიგრძეს 26-ს.
მეორე გამოსავალი რეგექსის გარეშე, უბრალოდ გადაამოწმებს არის თუ არა ყველა ასო სიმბოლო სტრიქონში.
const test1 = (str) => str.replace(/[^a-z]|(.)(?=.*\1)/gi, '').length === 26;
const test2 = (str) => [...`abcdefghijklmnopqrstuvwxyz`]
.every(ch => str.includes(ch));
console.log(test1('zy aemnofgbc jkhil pqasdfrs tuvrhfwx'));
console.log(test1('y aemnofgbc jkhil pqasdfrs tuvrhfwx'));
console.log(test2('zy aemnofgbc jkhil pqasdfrs tuvrhfwx'));
console.log(test2('y aemnofgbc jkhil pqasdfrs tuvrhfwx'));.as-console-wrapper{min-height: 100%!important; top: 0}