commit 219aa3e033a82bfc12f5813664bbcc84bc7113d7 Author: Anders Olsson Date: Tue Aug 4 18:50:39 2020 +0200 Initial commit. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c1c4c3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/target +Cargo.lock + +*.fst diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..8f60100 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] +members = [ + "wordlang", + "wordlang-gen", +] diff --git a/wordlang-gen/Cargo.toml b/wordlang-gen/Cargo.toml new file mode 100644 index 0000000..db9824f --- /dev/null +++ b/wordlang-gen/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "wordlang-gen" +version = "0.1.0" +authors = ["Anders Olsson "] +edition = "2018" + +[dependencies] +anyhow = "1.0" +isolang = "1.0" +quick-xml = "0.18" +regex = "1.3" +thiserror = "1.0" diff --git a/wordlang-gen/src/main.rs b/wordlang-gen/src/main.rs new file mode 100644 index 0000000..97b730d --- /dev/null +++ b/wordlang-gen/src/main.rs @@ -0,0 +1,527 @@ +use std::cmp::Ordering; +use std::collections::{hash_map::Entry, HashMap}; +use std::env; +use std::fs::File; +use std::io::{self, BufReader, Write}; + +use anyhow::Result; +use isolang::Language; +use quick_xml::{events::Event, Reader}; +use regex::Regex; +use thiserror::Error; + +#[derive(Error, Debug)] +enum Error { + #[error("xml error")] + Xml(#[from] quick_xml::Error), +} + +fn title(s: &str) -> String { + let mut c = s.chars(); + + match c.next() { + None => String::new(), + Some(f) => f.to_uppercase().chain(c).collect(), + } +} + +fn main() -> Result<()> { + let inputs = env::args().skip(1); + + let mut entries: HashMap> = HashMap::new(); + + let mut buf = Vec::new(); + + for input in inputs { + let mut reader = File::open(&input) + .map(BufReader::new) + .map(Reader::from_reader)?; + + reader.trim_text(true); + + let mut language = None; + let mut results = Vec::new(); + + loop { + match reader.read_event(&mut buf) { + Ok(Event::Start(ref e)) if e.name() == b"identity" => { + buf.clear(); + + loop { + match reader.read_event(&mut buf) { + Ok(Event::End(ref e)) if e.name() == b"identity" => { + break; + } + Ok(Event::Empty(ref e)) if e.name() == b"language" => { + let a = e + .attributes() + .filter_map(Result::ok) + .find(|a| a.key == b"type"); + + if let Some(a) = a { + if let Ok(lang) = reader.decode_without_bom(&a.value) { + language = Language::from_639_1(lang) + .or_else(|| Language::from_639_3(lang)) + .or_else(|| Language::from_locale(lang)); + } + } + } + + Err(e) => { + panic!("Error at position {}: {:?}", reader.buffer_position(), e) + } + Ok(Event::Eof) => break, + _ => (), + } + + buf.clear(); + } + } + Ok(Event::Start(ref e)) if e.name() == b"characters" => { + buf.clear(); + + results.extend(parse::exemplar_characters(&mut reader, &mut buf)); + } + Err(e) => panic!("Error at position {}: {:?}", reader.buffer_position(), e), + Ok(Event::Eof) => break, + _ => (), + } + + buf.clear(); + } + + buf.clear(); + + if results.is_empty() || language.is_none() { + continue; + } + + // Safe due to if statement above. + let language = language.unwrap(); + + match entries.entry(language) { + Entry::Occupied(entry) => { + entry.into_mut().extend(results); + } + Entry::Vacant(entry) => { + entry.insert(results); + } + } + } + + let mut languages = Vec::new(); + let mut matchers = Vec::new(); + + for (language, mut results) in entries.into_iter() { + results.sort_unstable(); + results.dedup(); + + let (single, groups): (Vec, _) = results + .into_iter() + .partition(|string| string.chars().count() == 1); + + let single = single + .into_iter() + .map(|string| string.chars().next().unwrap()) + .collect::>(); + + let mut ranges = ranger(single); + + ranges.sort_unstable(); + + let mut regex = String::new(); + + regex.push_str("^("); + + if !ranges.is_empty() { + regex.push('['); + + for kind in ranges { + match kind { + Kind::Single(ch) => regex.push(ch), + Kind::Range(from, to) => { + regex.push(from); + regex.push('-'); + regex.push(to); + } + } + } + + regex.push(']'); + + if !groups.is_empty() { + regex.push('|'); + } + } + + if !groups.is_empty() { + let mut first = true; + + for group in groups { + if !first { + regex.push('|'); + } else { + first = false; + } + + regex.push_str(&group); + } + } + + regex.push_str(")+$"); + + let re = Regex::new(®ex).expect("failed to build regex"); + + languages.push(language); + matchers.push(re); + } + + assert_eq!(languages.len(), matchers.len()); + + if languages.is_empty() { + return Ok(()); + } + + let stdout = io::stdout(); + let mut lock = stdout.lock(); + + writeln!(lock, "use isolang::Language;").expect("failed to write to stdout"); + writeln!(lock, "use once_cell::sync::Lazy;").expect("failed to write to stdout"); + writeln!(lock, "use regex::{{Regex, RegexSet}};").expect("failed to write to stdout"); + + writeln!(lock).expect("failed to write to stdout"); + + writeln!( + lock, + "pub static LANGUAGES: [Language; {}] = [", + languages.len() + ) + .expect("failed to write to stdout"); + + for language in &languages { + writeln!(lock, " Language::{},", title(language.to_639_3())) + .expect("failed to write to stdout"); + } + + writeln!(lock, "];").expect("failed to write to stdout"); + + writeln!(lock).expect("failed to write to stdout"); + + writeln!( + lock, + "pub static REGEX_SET: Lazy = Lazy::new(|| {{", + ) + .expect("failed to write to stdout"); + writeln!(lock, " RegexSet::new(vec![",).expect("failed to write to stdout"); + + for matcher in &matchers { + writeln!(lock, " \"{}\",", matcher).expect("failed to write to stdout"); + } + + writeln!(lock, " ]).unwrap()",).expect("failed to write to stdout"); + + writeln!(lock, "}});").expect("failed to write to stdout"); + + writeln!(lock).expect("failed to write to stdout"); + + for (language, matcher) in languages.iter().zip(matchers.iter()) { + writeln!( + lock, + "pub static RE_{}: Lazy = Lazy::new(|| Regex::new(\"{}\").unwrap());", + language.to_639_3().to_ascii_uppercase(), + matcher, + ) + .expect("failed to write to stdout"); + } + + writeln!(lock).expect("failed to write to stdout"); + + writeln!(lock, "impl super::LanguageExt for Language {{",).expect("failed to write to stdout"); + writeln!( + lock, + " fn is_match(&self, word: &str) -> Option {{", + ) + .expect("failed to write to stdout"); + writeln!(lock, " match self {{",).expect("failed to write to stdout"); + + for language in &languages { + writeln!( + lock, + " Language::{} => Some(RE_{}.is_match(word)),", + title(language.to_639_3()), + language.to_639_3().to_ascii_uppercase(), + ) + .expect("failed to write to stdout"); + } + + writeln!(lock, " _ => None,",).expect("failed to write to stdout"); + + writeln!(lock, " }}",).expect("failed to write to stdout"); + writeln!(lock, " }}",).expect("failed to write to stdout"); + writeln!(lock, "}}",).expect("failed to write to stdout"); + + lock.flush().expect("failed to flush to stdout"); + + Ok(()) +} + +#[derive(Clone, Copy, Eq, Debug)] +enum Kind { + Single(char), + Range(char, char), +} + +impl PartialOrd for Kind { + fn partial_cmp(&self, other: &Kind) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for Kind { + fn cmp(&self, other: &Kind) -> Ordering { + match (self, other) { + (Kind::Single(a), Kind::Single(b)) => a.cmp(&b), + (Kind::Single(a), Kind::Range(b, _)) => a.cmp(&b), + (Kind::Range(a, _), Kind::Single(b)) => a.cmp(&b), + (Kind::Range(a, _), Kind::Range(b, _)) => a.cmp(&b), + } + } +} + +impl PartialEq for Kind { + fn eq(&self, other: &Kind) -> bool { + match (self, other) { + (Kind::Single(a), Kind::Single(b)) => a == b, + (Kind::Single(_), Kind::Range(_, _)) => false, + (Kind::Range(_, _), Kind::Single(_)) => false, + (Kind::Range(a, b), Kind::Range(c, d)) => a == c && b == d, + } + } +} + +fn ranger(mut chars: Vec) -> Vec { + chars.sort_unstable(); + + let mut set = HashMap::new(); + + for c in chars { + if let Some(p) = (' '..c).rev().next() { + if !set.contains_key(&p) { + set.insert(c, (c, 1)); + } else { + let (q, n) = set.remove(&p).unwrap(); + set.insert(c, (q, n + 1)); + } + } else { + set.insert(c, (c, 1)); + } + } + + set.into_iter() + .flat_map(|(to, (from, n))| match n { + 1 => vec![Kind::Single(from)], + 2 => vec![Kind::Single(from), Kind::Single(to)], + _ => vec![Kind::Range(from, to)], + }) + .collect::>() +} + +mod parse { + use std::char; + use std::fs::File; + use std::io::BufReader; + + use anyhow::Result; + use quick_xml::{events::Event, Reader}; + + pub fn exemplar_characters( + reader: &mut Reader>, + buf: &mut Vec, + ) -> Vec { + let mut results = Vec::new(); + let mut parse = false; + + loop { + match reader.read_event(buf) { + Ok(Event::End(ref e)) if e.name() == b"characters" => { + break; + } + Ok(Event::Start(ref e)) if e.name() == b"exemplarCharacters" => { + parse = e.attributes().count() == 0 + || e.attributes() + .filter_map(Result::ok) + .any(|a| a.key == b"type" && a.value.as_ref() == b"auxiliary"); + } + Ok(Event::End(ref e)) if e.name() == b"exemplarCharacters" && parse => { + parse = false; + } + Ok(Event::Text(e)) if parse => { + if let Ok(text) = reader.decode_without_bom(&e) { + results.extend(characters(text)); + } else { + panic!("failed to decode text"); + } + } + Err(e) => panic!("Error at position {}: {:?}", reader.buffer_position(), e), + Ok(Event::Eof) => break, + _ => (), + } + + buf.clear(); + } + + results + } + + fn characters(input: &str) -> Vec { + #[derive(Debug)] + enum State { + Start, + Next, + Escaped, + Char(char), + Range(char), + Unicode(String), + Sequence(SequenceState, String), + End, + } + + #[derive(Debug)] + enum SequenceState { + Default, + Escaped, + Unicode(String), + } + + let mut chars = Vec::new(); + let mut state = State::Start; + + // http://unicode.org/reports/tr35/tr35-6.html#Character_Elements + + for ch in input.chars() { + // eprintln!("{:?}, {:?}", state, ch); + + state = match (state, ch) { + (State::Start, '[') => State::Next, + (State::Start, ']') => State::End, + + (State::Next, ' ') => State::Next, + (State::Next, ']') => State::End, + (State::Next, '\\') => State::Escaped, + (State::Next, '{') => State::Sequence(SequenceState::Default, String::new()), + (State::Next, ch) => State::Char(ch), + + (State::Escaped, 'u') => State::Unicode(String::new()), + (State::Escaped, ch) => { + chars.push(ch.to_string()); + + State::Next + } + + (State::Char(ch), ' ') => { + chars.push(ch.to_string()); + + State::Next + } + (State::Char(ch), ']') => { + chars.push(ch.to_string()); + + State::End + } + (State::Char(ch), '-') => State::Range(ch), + + (State::Range(_), ' ') => panic!("oh crap"), + (State::Range(_), ']') => panic!("oh crap"), + (State::Range(from), to) => { + chars.extend((from..=to).map(|ch| ch.to_string())); + + State::Next + } + + (State::Unicode(string), ' ') => { + let value = u32::from_str_radix(&string, 16).unwrap(); + let value = char::from_u32(value).unwrap(); + + chars.push(value.to_string()); + + State::Next + } + (State::Unicode(string), '\\') => { + let value = u32::from_str_radix(&string, 16).unwrap(); + let value = char::from_u32(value).unwrap(); + + chars.push(value.to_string()); + + State::Escaped + } + (State::Unicode(string), ']') => { + let value = u32::from_str_radix(&string, 16).unwrap(); + let value = char::from_u32(value).unwrap(); + + chars.push(value.to_string()); + + State::End + } + (State::Unicode(mut string), ch) => { + string.push(ch); + + State::Unicode(string) + } + + (State::Sequence(SequenceState::Default, string), '}') => { + chars.push(string); + + State::Next + } + (State::Sequence(SequenceState::Default, string), '\\') => { + State::Sequence(SequenceState::Escaped, string) + } + (State::Sequence(SequenceState::Default, mut string), ch) => { + string.push(ch); + + State::Sequence(SequenceState::Default, string) + } + + (State::Sequence(SequenceState::Escaped, string), 'u') => { + State::Sequence(SequenceState::Unicode(String::new()), string) + } + + (State::Sequence(SequenceState::Unicode(unicode), mut string), '}') => { + let value = u32::from_str_radix(&unicode, 16).unwrap(); + let value = char::from_u32(value).unwrap(); + + string.push(value); + chars.push(string); + + State::Next + } + (State::Sequence(SequenceState::Unicode(unicode), mut string), '\\') => { + let value = u32::from_str_radix(&unicode, 16).unwrap(); + let value = char::from_u32(value).unwrap(); + + string.push(value); + + State::Sequence(SequenceState::Escaped, string) + } + (State::Sequence(SequenceState::Unicode(mut unicode), mut string), ch) => { + unicode.push(ch); + + if unicode.len() < 4 { + State::Sequence(SequenceState::Unicode(unicode), string) + } else { + let value = u32::from_str_radix(&unicode, 16).unwrap(); + let value = char::from_u32(value).unwrap(); + + string.push(value); + + State::Sequence(SequenceState::Default, string) + } + } + + (state, _) => state, + }; + } + + chars + } +} diff --git a/wordlang/Cargo.toml b/wordlang/Cargo.toml new file mode 100644 index 0000000..4082fe9 --- /dev/null +++ b/wordlang/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "wordlang" +version = "0.1.0" +authors = ["Anders Olsson "] +edition = "2018" + +[dependencies] +isolang = "1.0" +once_cell = "1.4" +regex = "1.3" diff --git a/wordlang/src/data.rs b/wordlang/src/data.rs new file mode 100644 index 0000000..7ae9e1f --- /dev/null +++ b/wordlang/src/data.rs @@ -0,0 +1,864 @@ +use isolang::Language; +use once_cell::sync::Lazy; +use regex::{Regex, RegexSet}; + +pub static LANGUAGES: [Language; 211] = [ + Language::Orm, + Language::Nno, + Language::Mri, + Language::Ast, + Language::Jgo, + Language::Fas, + Language::Saq, + Language::Shi, + Language::Slk, + Language::Lug, + Language::Bas, + Language::Sqi, + Language::Sbp, + Language::Kea, + Language::Glg, + Language::Che, + Language::Nnh, + Language::Hin, + Language::Cor, + Language::Ton, + Language::Uig, + Language::Wol, + Language::Afr, + Language::Zul, + Language::Dje, + Language::Nob, + Language::Smn, + Language::Pus, + Language::Luo, + Language::Jpn, + Language::Mal, + Language::Mai, + Language::Nld, + Language::Slv, + Language::Tha, + Language::Bre, + Language::Eus, + Language::Lub, + Language::Vie, + Language::Dzo, + Language::Spa, + Language::Swa, + Language::Sme, + Language::Ces, + Language::Brx, + Language::Heb, + Language::Kas, + Language::Que, + Language::Ltz, + Language::Kat, + Language::Chu, + Language::Roh, + Language::Bel, + Language::Nmg, + Language::Srp, + Language::Pol, + Language::Nde, + Language::Som, + Language::Yav, + Language::Sag, + Language::Ewe, + Language::Tel, + Language::Bod, + Language::Epo, + Language::Lao, + Language::Ukr, + Language::Sah, + Language::Bez, + Language::Est, + Language::Mkd, + Language::Khm, + Language::Snd, + Language::Ckb, + Language::Ina, + Language::Kde, + Language::Fao, + Language::Kaz, + Language::Kir, + Language::Mar, + Language::Ibo, + Language::Mlt, + Language::Naq, + Language::Pcm, + Language::Vun, + Language::Wae, + Language::Xho, + Language::Yid, + Language::Zgh, + Language::Hau, + Language::Gsw, + Language::Nep, + Language::Kam, + Language::Fry, + Language::Fra, + Language::Kal, + Language::Kln, + Language::Lav, + Language::Mgo, + Language::Tgk, + Language::Twq, + Language::Cym, + Language::Mni, + Language::Nds, + Language::Ebu, + Language::Nyn, + Language::Ron, + Language::Bam, + Language::Isl, + Language::Kur, + Language::Gla, + Language::Ara, + Language::Hye, + Language::Glv, + Language::Kok, + Language::Por, + Language::Run, + Language::Kan, + Language::Swe, + Language::Khq, + Language::Tat, + Language::Kin, + Language::Kik, + Language::Kor, + Language::Ita, + Language::Deu, + Language::Lkt, + Language::Oss, + Language::Gle, + Language::Guz, + Language::Ben, + Language::Aka, + Language::Haw, + Language::Jmc, + Language::Mua, + Language::Ori, + Language::Eng, + Language::Lag, + Language::Pan, + Language::Nus, + Language::Fin, + Language::Tam, + Language::Ksf, + Language::Xog, + Language::Sun, + Language::Guj, + Language::Teo, + Language::Iii, + Language::Aze, + Language::Bem, + Language::Bos, + Language::Ccp, + Language::Luy, + Language::Dyo, + Language::Mya, + Language::Lit, + Language::Mas, + Language::Ewo, + Language::Mfe, + Language::Dua, + Language::Mzn, + Language::Mgh, + Language::Amh, + Language::Jav, + Language::Prg, + Language::Ses, + Language::Tir, + Language::Mlg, + Language::Dav, + Language::Ind, + Language::Hun, + Language::Ksb, + Language::Hsb, + Language::Agq, + Language::Kab, + Language::Lin, + Language::Tuk, + Language::Asa, + Language::Asm, + Language::Ceb, + Language::Dsb, + Language::Mon, + Language::Rof, + Language::Uzb, + Language::Rwk, + Language::Chr, + Language::Lrc, + Language::Cat, + Language::Seh, + Language::Vol, + Language::Tur, + Language::Ful, + Language::Yue, + Language::Fur, + Language::Tzm, + Language::Kkj, + Language::Msa, + Language::Bul, + Language::Rus, + Language::Vai, + Language::Hrv, + Language::Yor, + Language::Ksh, + Language::Sin, + Language::Urd, + Language::Fil, + Language::Cgg, + Language::Ell, + Language::Dan, + Language::Zho, + Language::Mer, + Language::Sna, +]; + +pub static REGEX_SET: Lazy = Lazy::new(|| { + RegexSet::new(vec![ + "^([a-z])+$", + "^([a-zàáä-êñ-ôöøüčđńŋšŧžǎ])+$", + "^([a-zāēīōū]|ng|wh)+$", + "^([a-zªºà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭḥḷ])+$", + "^([a-záâíîúûńŋǎǐǔǹɔɛʉḿẅꞌ]|m̀|m̄|n̄|pf|sh|ts|ŋ̀|ŋ́|ŋ̄|ɔ́|ɔ̂|ɔ̌|ɛ̀|ɛ́|ɛ̂|ɛ̄|ɛ̌|ʉ́|ʉ̂|ʉ̈|ʉ̌)+$", + "^([ء-غـ-ْٰٖٔټپځڅچډړږژښکګگڼی‌-‏])+$", + "^([a-z])+$", + "^([a-zɛɣḍḥṛṣṭⴰⴱⴳⴷⴹⴻ-ⴽⵀⵃ-ⵅⵇⵉⵊⵍ-ⵏⵓ-ⵖⵙ-ⵜⵟⵡ-ⵣⵥ]|gʷ|kʷ|ⴳⵯ|ⴽⵯ)+$", + "^([a-zà-âä-ïñ-ôöø-ýÿāăčďēĕīĭĺľňōŏőœŕřšťūŭűž]|ch|dz|dž)+$", + "^([a-zŋ]|ny)+$", + "^([a-zà-âè-êì-îò-ôù-ûāēěīńŋōūǎǐǒǔǹɓɔɛ]|a᷆|a᷇|e᷆|e᷇|i᷆|i᷇|o᷆|o᷇|u᷆|u᷇|ɔ̀|ɔ́|ɔ̂|ɔ̄|ɔ̌|ɔ᷆|ɔ᷇|ɛ̀|ɛ́|ɛ̂|ɛ̄|ɛ̌|ɛ᷆|ɛ᷇)+$", + "^([a-zçë]|dh|gj|ll|nj|rr|sh|th|xh|zh)+$", + "^([a-z])+$", + "^([a-zªºà-ïñ-öø-üÿāăēĕĩīĭōŏœũūŭẽ]|dj|lh|nh|n̈|rr|tx)+$", + "^([a-zªºà-åç-ïñ-öù-ü])+$", + "^([а-яё]|аь|гӏ|ий|кк|ккх|кх|кь|кӏ|ов|оь|пп|пӏ|рхӏ|сс|тт|тӏ|ув|уь|уьй|хь|хӏ|цӏ|чӏ|юь|яь)+$", + "^([a-zà-âè-êìíò-ôù-ûÿěńŋǎǒǔɔɛʉʼḿẅ]|pf|sh|ts|ɔ̀|ɔ́|ɔ̂|ɔ̌|ɛ̀|ɛ́|ɛ̂|ɛ̌|ʉ̀|ʉ́|ʉ̂|ʉ̌)+$", + "^([ँ-ःअ-ऍए-ऑओ-नप-रलळव-ह़-ॅे-ॉो-्ॐ‌‍])+$", + "^([a-z])+$", + "^([a-zà-âä-ïñ-ôöø-üÿāăēĕīĭōŏœūŭʻ]|ng)+$", + "^([ئ‎‏])+$", + "^([a-zàãéëñóŋ])+$", + "^([a-zà-ïò-ôöù-ý])+$", + "^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ]|bh|ch|dl|dy|gc|gq|gx|hh|hl|kh|kl|kp|nc|ngc|ngq|ngx|nhl|nk|nkc|nkq|nkx|nq|ntsh|nx|ny|ph|qh|rh|sh|th|tl|ts|tsh|xh)+$", + "^([a-zãõŋšžɲẽ])+$", + "^([a-zàáã-êíñ-ôöøúüčđńŋšŧžǎ])+$", + "^([a-zà-éíñ-óöøúüčđńŋšž])+$", + "^([ء-ؤئ-غفقل-وي-ْٰٔټپځڅچډړږژښکګگڼیۍېے‌-‏])+$", + "^([a-z])+$", + "^([々ぁ-んゝゞヴ-ヶー一丁七万-下不与丑且世丘丙両並中丸丹主久乏乗乙九乱乳乾亀了予争事二互五井亜亡交亥亨享-亭人仁今介仏仕他付仙代-以仮仰仲件任企伏-休会伝伯伴伸伺似但位-佐体何余作佳併使例侍供依価侮侯侵便係促俊俗保信修俳俵俸俺倉個倍倒候借倣値倫倹偉偏停健側-偶偽傍傑傘備催債傷傾働像僕僚僧儀億儒償優元-兆先光克-兎児党入全八-六共兵具典兼内円冊再冒冗写冠冬冷准凍凝凡処凶凸-出刀刃分-刈刊刑列初判別利到制-券刺刻則削前剖剛剣-剥副剰割創劇力功加劣助努励労効劾勅勇勉動勘務勝募勢勤勧勲包化北匠匹-医匿十千升午半卑-協南単博占卯-危即-卵卸厄厘厚原厳去参又及-収叔取受叙口-句叫召可-右号司各合吉同-向君吟否含吸吹呈-告周味呼命和咲哀品員哲唆唇唐唯唱商問啓善喚喜喝喪喫営嗣嘆嘉嘱器噴嚇囚四回因団困囲図固国圏園土圧在地坂均坊坑坪垂型垣埋城域執培基埼堀堂堅堕堤堪報場塀塁塊塑塔塗塚塩填塾境墓増墜墨墳墾壁壇壊壌士壬壮声-売変夏夕外多夜夢大天-夫央失奇-奉奏契奔奥奨奪奮女奴好如-妄妊妙妥妨妹妻姉始姓委姫姻姿威娘娠娯婆婚婦婿媒嫁嫌嫡嬢子孔字存孝季孤学孫宅宇-安完宗-定宜宝実客-室宮宰害-家容宿寂寄-密富寒寛寝察寡寧審寮寸寺対寿封専射将尉-尋導小少尚就尺尼-局居屈届屋展属層履屯山岐岡岩岬岳岸峠峡峰島崇崎崩川州巡巣工-巨差己巳巻市布帆希帝帥師席帯帰帳常帽幅幕幣干-年幸幹幻-幾庁広床序底店庚府度座庫庭庶-庸廃廉廊延廷建弁弊式弐弓-引弘弟弦弧弱張強弾当形彩彫彰影役彼往征径待律後徐徒従得御復循微徳徴徹心必忌忍志-忙応忠快念怒怖思怠急性怪恋恐恒恥恨恩恭息恵悔悟悠患悦悩悪悲悼情惑惜惨惰想愁愉意愚愛感慈態慌慎慕慢慣慨慮慰慶憂憎憤憩憲憶憾懇懐懲懸戊戌成-戒戦戯戸戻房所扇扉手才打払扱扶批承技抄把抑投抗折抜択披抱抵抹押抽担拍拐拒拓拘拙招拝拠拡括拷拼拾持指挑挙挟振挿捕捜捨据掃授掌排掘掛採探接控推措掲描提揚換握揮援揺損搬搭携搾摂摘摩撃撤撮撲擁操擦擬支改攻放政故敏救敗教敢散敬数整敵敷文斉斎斗料斜斤斥断新方施旅旋族旗既日旧-早旬昆昇昌明易昔星映春昨昭是昼時晩普景晴晶暁暇暑暖暗暦暫暮暴曇曜曲更書曹替最月有服朕朗望朝期木未-札朱朴机朽杉材村束条来杯東松板析林枚果枝枠枢枯架柄某染柔柱柳査栄栓校株核根格栽桃案桑桜桟梅械棄棋棒棚棟森棺植検楔業極楼楽概構様槽標模権横樹橋機欄欠次欧欲欺款歌歓止正武歩歯歳歴死殉-残殖殴段殺殻殿母毎毒比毛氏民気水氷永汁求汎汗汚江池決汽沈沖没沢河沸油治沼沿況泉泊泌法泡-泣泥注泰泳洋洗洞津洪活派流浄浅浜浦浪浮浴海浸消涙涯液涼淑淡深混添清渇-渉渋渓減渡渦温測港湖湯湾-満源準溝溶滅滋滑滝滞滴漁漂漆漏演漠漢漫漬漸潔潜潟潤潮澄激濁濃濫濯瀬火灯灰災炉炊炎炭点為烈無焦然焼煙照煩煮熟熱燃燥爆爵父片版牙牛牧物牲特犠犬犯状狂狩独狭猛猟猪猫献猶猿獄獣獲玄率玉王珍珠班現球理琴環璽瓶甘甚生産用田-申男町画界畑畔留畜畝略番異畳疎疑疫疲疾病症痘痛痢痴療癒癖癸発登白百的皆皇皮皿盆益盗盛盟監盤目盲直相盾省看県真眠眺眼着睡督瞬矛矢知短矯石砂研砕砲破硝硫硬碁碑確磁磨礁礎示礼社祈祉祖祚祝神祥票祭禁禄禅禍-福秀私秋科秒秘租秩称移程税稚種稲稼稿穀穂積穏穫穴究空突窃窒窓窮窯立竜章童端競竹笑笛符第筆等筋筒答策箇算管箱節範築篤簡簿籍米粉粋粒粗粘粛粧精糖糧糸系糾紀約紅紋納純紙-紛素-索紫累細紳紹紺終組経結絞絡給統絵絶絹継続維綱網綿緊総緑緒線締編緩緯練縁縄縛縦縫縮績繁繊織繕繭繰缶罪置罰署罷羅羊美群義羽翁翌習翻翼老考者耐耕耗耳聖聞聴職肉肌肖肝肢肥肩肪肯育肺胃胆背胎胞胴胸能脂脅脈脚脱脳腐腕腰腸腹膚膜膨臓臣臨自臭至致興舌舎舗舞舟航般舶船艇艦良色芋芝花芳芸芽苗若苦英茂茎茶草荒荘荷菊菌菓菜華落葉著葬蒸蓄蔵薄薦薪-薬藤藩藻虎虐虚虜虞虫蚊蚕蛇蛍蛮融血衆行術街衛衝衡衣表衰衷袋被裁裂装裏裕補裸製複褐褒襟襲西要覆覇見規視覚覧親観角解触言訂計討訓託記訟訪設許訳訴診証詐詔評詞詠試詩詰-詳誇誉誌認誓誕誘語誠誤説読誰課調談請論諭諮諸諾謀謁謄謙講謝謡謹識譜警議譲護谷豆豊豚象豪貝貞負-貢貧-販貫責貯貴買貸費貿賀賃賄資賊賓賛賜賞賠賢賦質購贈赤赦走赴起超越趣足距跡路跳践踊踏躍身車軌軍軒軟転軸軽較載輝輩輪輸轄辛辞辰-農辺込迅迎近返迫迭述迷追退送逃逆透逐逓途通逝速造連逮週進逸遂遅遇遊運遍過道-違遠遣適遭遮遵遷選遺避還邦邪邸郊郎郡部郭郵郷都酉酌配酒酔酢酪酬酵酷酸醜醸釈里-量金針釣鈍鈴鉄鉛鉢鉱銀銃銅銘銭鋭鋳鋼錄錠錬錯録鍛鎖鎮鏡鐘鑑長門閉開閏閑間関閣閥閲闘阪防阻附降限陛院-陥陪陰陳陵陶陸険陽隅隆隊階随隔際障隠隣隷隻雄-雇雉雌雑離難雨雪雰雲零雷電需震霊霜霧露青静非面革靴韓音韻響頂頃項順預-頒領頬頭頻頼題額顔顕願類顧風飛食飢飯飲飼-飾養餓館首香馬駄-駆駐騎騒験騰驚骨髄高髪鬼魂魅魔魚鮮鯨鳥鳳鳴鶏鹿麗麦麻黄黒黙鼓鼠鼻齢])+$", + "^([ംഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-ൃെ-ൈൊ-്ൗൠൡൺ-ൿ‌‍])+$", + "^([ंःअ-ऌएऐओ-घच-नप-रलव-ह़ा-ूेैोौॡ]|अं|अः|क्ष|ज्ञ|डं|त्र|श्र)+$", + "^([a-zà-ëí-ïñóôöø-üÿœ]|ij|íj́)+$", + "^([a-zà-âä-ïñ-ôöø-üÿāăćčđēĕīĭōŏœšūŭž])+$", + "^([ก-ฺเ-๎​])+$", + "^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ]|ch|cʼh)+$", + "^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ])+$", + "^([a-zàáèéìíòóùúɔɛ]|ng|ny|ph|shi|ɔ̀|ɔ́|ɛ̀|ɛ́)+$", + "^([a-zà-ãè-êìíò-õùúýăđĩũơưạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ])+$", + "^([ཀ-གང-ཇཉ-ཌཎ-དན-བམ-ཛཝ-ཨིེུ-ཾ྄ྀྐ-ྒྔྗྙ-ྜྞ-ྡྣ-ྦྨ-ྫྭྱ-ླྵ-ྷྺ-ྼ])+$", + "^([a-zªºà-ïñ-ôöø-ýÿāăēĕīĭōŏœūŭ])+$", + "^([a-z]|ch)+$", + "^([a-zàáã-éíñ-óöøúüčđńŋšŧž])+$", + "^([a-zà-ïñ-ôöø-ýÿāăčďēĕěīĭľłňōŏœŕřšťūŭůž]|ch)+$", + "^([ँंअ-ऊऍए-ऑओ-घच-नप-रलळव-ह़ा-ृॅे-ॉो-्‌‍]|ड़)+$", + "^([ְ-ֹֻ-ֽֿׁׂׄא-ת״‎‏])+$", + "^([ؠ-ؤابت-غفقل-نوَ-ِٔ-ٟٗٲٹپچڈڑژکگںھہۄۆیۍے‎‏])+$", + "^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ]|ch|chʼ|kʼ|ll|pʼ|qʼ|tʼ)+$", + "^([a-zß-ïñ-ôöø-üÿāăēĕğīĭİıōŏœşūŭ])+$", + "^([ა-ჺⴀ-ⴥ])+$", + "^([а-ьює-їџѡѣѥѧѩѫѭѯѱѳѵѷѻѽѿҁ-҄҇-҉ҥ‌‍ⷠ-ⷿⸯꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩ꙯-꙲ꙴ-ꙻ꙽ꙿꚞꚟ︮︯])+$", + "^([áâä-çêëí-ïñóôöøú-üÿāăēĕīĭōŏœūŭ])+$", + "^([а-зй-шы-яёіў]|а́|дж|дз|е́|о́|у́|ы́|э́|ю́|я́|ё́|і́)+$", + "^([a-záâäéêí-ïóôöúûāēěīńŋōŕūǎǐǒǔǝɓɔɛ]|ǝ́|ǝ̂|ǝ̄|ǝ̌|ɔ́|ɔ̂|ɔ̄|ɔ̌|ɛ́|ɛ̂|ɛ̄|ɛ̌)+$", + "^([a-zåćčđšžа-яёђј-ћџ]|dž|lj|nj|а̂|е̂|и̂|о̂|у̂)+$", + "^([a-zßàâä-ëîïóôöùûüÿąćęłńœśźż])+$", + "^([a-z])+$", + "^([a-z])+$", + "^([a-zà-âèéì-îò-ôù-ûāīŋōūǎǒǔɔɛ]|mb|ny|ŋg|ɔ̀|ɔ́|ɛ̀|ɛ́)+$", + "^([a-zâäêëîïôöùûü])+$", + "^([a-zà-ïñ-öø-üÿāăĕĩĭŋŏœũŭƒɔɖɛɣʋẽ]|ɔ̀|ɔ́|ɔ̃|ɛ̀|ɛ́|ɛ̃)+$", + "^([ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-హా-ౄె-ైొ-్ౕౖౠౡ౦-౯‌‍])+$", + "^([ༀཀ-གང-ཇཉ-ཌཎ-དན-བམ-ཛཝ-ཨཪིུཷཹ-྄ྀྐ-ྒྔ-ྗྙ-ྜྞ-ྡྣ-ྦྨ-ྫྭ-ྸྺ-ྼ]|ཀྵ|གྷ|ཌྷ|དྷ|བྷ|ཛྷ|ཱི|ཱུ|ཱྀ|ྐྵ|ྒྷ|ྜྷ|ྡྷ|ྦྷ|ྫྷ|ྲྀ|ླྀ)+$", + "^([a-zĉĝĥĵŝŭ])+$", + "^([ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜໝ​])+$", + "^([ʼа-яёєіїґ]|а́|е́|и́|о́|у́|ю́|я́|є́|і́|ї́)+$", + "^([а-яёҕҥүһө]|дь|нь)+$", + "^([a-z])+$", + "^([a-zà-ïñ-öø-üāēīōŏœšūž])+$", + "^([а-ик-шѐѓѕј-њќѝџ])+$", + "^([ក-អឥ-ឧឩ-្​]|អា|ឧក)+$", + "^([ءآئ-بت-غفقل-ويَ-ِٺٻٽ-ڀڃڄچڇڊڌڍڏڙڦکڪگڱڳڻھ‌‍]|جھ|گھ)+$", + "^([ء-غف-ْپچڕژڤکگڵھۆیێە‎‏])+$", + "^([a-z]|ch|ph)+$", + "^([a-z])+$", + "^([a-záæíðóøúý])+$", + "^([а-яёіғқңүұһәө])+$", + "^([а-яёңүө])+$", + "^([ँ-ःअ-ऍए-ऑओ-नप-ळव-ह़-ॅे-ॉो-्ॐ‌‍])+$", + "^([a-zàáèéìíòóùúāēīńōūǹḿṅẹịọụ]|ch|gb|gh|gw|kp|kw|m̀|nw|ny|sh|ị̀|ị́|ọ̀|ọ́|ụ̀|ụ́)+$", + "^([a-zàèìòùċġħż]|għ)+$", + "^([a-zâîôûǀ-ǃ])+$", + "^([a-zàáèéìíòóùúẹọ]|ch|gb|kp|sh|zh|ẹ̀|ẹ́|ọ̀|ọ́)+$", + "^([a-z])+$", + "^([a-zß-ïñ-öø-üÿāăčēĕīĭōŏœšũūŭ])+$", + "^([a-z])+$", + "^([א-ףץ-ת‎‏]|אַ|אָ|בֿ|דזש|וּ|וו|וי|זש|טש|יִ|יי|כּ|פּ|פֿ|שׂ|תּ|ײַ)+$", + "^([ⴰⴱⴳⴷⴹⴻ-ⴽⵀⵃ-ⵅⵇⵉⵊⵍ-ⵏⵓ-ⵖⵙ-ⵜⵟⵡ-ⵣⵥ]|ⴳⵯ|ⴽⵯ)+$", + "^([a-zà-âè-êì-îò-ôù-ûƙƴɓɗʼ]|r̃|sh|ts|ʼy)+$", + "^([a-zà-âä-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ])+$", + "^([ँ-ःअ-ऍए-ऑओ-नप-रलळव-ह़-ॅे-ॉो-्ॐ‌‍])+$", + "^([a-wyzĩũ])+$", + "^([a-pr-wyzà-âäæè-ëíïò-ôöù-ý]|ij|íj́)+$", + "^([a-zß-ïñ-öø-üÿāćēīijœřšſǔ])+$", + "^([a-zá-ãåæéêíîôõøúûĩĸũẽ])+$", + "^([a-z])+$", + "^([a-zāčēģīķļņōŗšūž])+$", + "^([a-zàèìòùŋɔəʼ]|ch|gh|ɔ̀|ə̀)+$", + "^([а-яёғқҳҷӣӯ])+$", + "^([a-zãõŋšžɲẽ])+$", + "^([a-zà-ïñ-ôöø-ýÿāăēĕīĭōŏœūŭŵŷẁẃẅỳ]|ch|dd|ff|ll|ng|ph|rh|th)+$", + "^([‌‍])+$", + "^([a-zà-âä-ïñ-ôöø-üÿāăēĕęīĭōŏœūŭ])+$", + "^([a-zĩũ])+$", + "^([a-z])+$", + "^([a-zà-âäåç-ëîñöüăşţșț])+$", + "^([a-zŋɔɛɲ])+$", + "^([a-záæéíðóöúýþ])+$", + "^([a-zß-ïñ-ôø-ûÿāăēĕīĭōŏœşūŭ])+$", + "^([a-zà-ïñ-ôöø-üÿāăċēĕġīĭıłōŏœşūŭșḋḟṁṗṡṫ])+$", + "^([ء-غـ-ْٯٰپچژڜڢڤڥڧ-کڭگیݣ‌-‏])+$", + "^([ա-և])+$", + "^([a-zç])+$", + "^([ँ-ःअ-ऍए-ऑओ-नप-रलळव-ह़-ॅे-ॉो-्ॐ०-९‌‍]|क़|ख़|ग़|ज़|ड़|ढ़|फ़|य़)+$", + "^([a-zªºà-ïñ-öø-üÿāăēĕīĭōŏœūŭ])+$", + "^([a-z])+$", + "^([ಂಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೞೠೡ೦-೯‌‍])+$", + "^([a-zà-éëí-ïñóöøúüÿāī])+$", + "^([a-zãõŋšžɲẽ])+$", + "^([а-яёғҗқңүһәө])+$", + "^([a-z])+$", + "^([a-zĩũ])+$", + "^([ᄀ-하-ᅵᆨ-ᇂ丘串乃久乖九乞乫乾亂亘交京仇今介件价企伋伎伽佳佶侃來侊供係俓俱個倞倦倨假偈健傀傑傾僅僑價儆儉儺光克兢內公共其具兼冀冠凱刊刮券刻剋剛劇劍劒功加劤劫勁勍勘勤勸勻勾匡匣區南卦却卵卷卿厥去及口句叩叫可各吉君告呱呵咎咬哥哭啓喀喇喝喫喬嗜嘉嘔器囊困固圈國圭圻均坎坑坤坰坵垢基埼堀堅堈堪堺塊塏境墾壙壞夔奇奈奎契奸妓妗姑姜姦娘娜嫁嬌孔季孤宏官客宮家寄寇寡寬尻局居屆屈岐岡岬崎崑崗嵌嵐嶇嶠工巧巨己巾干幹幾庚庫康廊廐廓廣建弓强彊徑忌急怪怯恐恝恪恭悸愆感愧愷愾慊慣慤慨慶慷憩憬憾懃懇懦懶懼戈戒戟戡扱技抉拉拏拐拒拘括拮拱拳拷拿捏据捲捺掘掛控揀揆揭擊擎擒據擧攪攷改攻故敎救敢敬敲斛斤旗旣昆昑景晷暇暖暠暻曠曲更曷朗朞期机杆杞杰枏果枯架枸柑柩柬柯校根格桀桂桔桿梏梗械梱棄棋棍棘棨棺楗楠極槁構槐槨槪槻槿樂橄橋橘機檄檎檢櫃欄權欺款歌歐歸殼毆毬氣求江汨汲決汽沂沽洛洸浪涇淃淇減渠渴湳溝溪滑滾漑潔潰澗激濫灌灸炅炚炬烙烱煖爛牽犬狂狗狡狼獗玖玘珂珏珖珙珞珪球琦琨琪琯琴瑾璂璟璣璥瓊瓘瓜甄甘甲男畇界畸畺畿疆疥疳痂痙痼癎癩癸皆皎皐盖監看眷睾瞰瞼瞿矜矩矯硅硬碁碣磎磬磯磵祁祇祈祛祺禁禽科稈稼稽稿穀究穹空窘窟窮窺竅竟竭競竿筋筐筠箇箕箝管簡粳糠系糾紀納紘級紺絅結絞給絳絹絿經綱綺緊繫繭繼缺罐罫羅羈羌羔群羹翹考耆耉耕耭耿肌肝股肩肯肱胛胱脚脛腔腱膈膏膠臘臼舅舊舡艮艱芎芥芩芹苛苟苦苽茄莖菅菊菌菓菫菰落葛葵蓋蕎蕨薑藁藍藿蘭蘿虔蚣蛟蝎螺蠟蠱街衢衲衾衿袈袞袴裙裸褐襁襟襤見規覡覲覺觀角計記訣訶詭誇誡誥課諫諾謙講謳謹譏警譴谷谿豈貢貫貴賈購赳起跏距跨踞蹇蹶躬軀車軌軍軻較輕轎轟辜近迦迲适逑逕逵過遣遽邏那邯邱郊郎郡郭酪醵金鈐鈞鉀鉅鉗鉤銶鋸鋼錡錤錦錮鍋鍵鎌鎧鏡鑑鑒鑛開間閘閣閨闕關降階隔隙雇難鞏鞠鞨鞫頃頸顆顧飢餃館饉饋饑駒駕駱騎騏騫驅驕驚驥骨高鬼魁鮫鯤鯨鱇鳩鵑鵠鷄鷗鸞麒麴黔鼓龕龜가-힣])+$", + "^([a-zªºß-ïñ-öø-üÿœ])+$", + "^([a-zß-ïñ-ôöø-üÿāăēĕğīĭİıōŏœşūŭ])+$", + "^([a-záéíóúčŋšžǧȟʼ]|aŋ|iŋ|kh|kȟ|kʼ|ph|pȟ|pʼ|sʼ|th|tȟ|tʼ|uŋ|čh|čʼ|šʼ|ȟʼ)+$", + "^([а-яёӕ]|гъ|дж|дз|къ|пъ|тъ|хъ|цъ|чъ)+$", + "^([a-záåéíóúċġḃḋḟṁṗṡṫ])+$", + "^([a-z])+$", + "^([ঁ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗৠ-ৣৰ-৺‌‍]|ক্ষ|ড়|ঢ়|য়)+$", + "^([a-wyzɔɛ])+$", + "^([a-zāēīōūʻ])+$", + "^([a-z])+$", + "^([a-zãëõĩŋǝɓɗṽ])+$", + "^([ଁ-ଃଅ-ଋଏଐଓ-ନପ-ରଲଳଵ-ହ଼ା-ୃେୈୋ-୍ୟୱ‌‍]|ଡ଼|ଢ଼)+$", + "^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœšūŭḓḽṅṋṱ])+$", + "^([a-záéíóúɨʉ])+$", + "^([ء-ؤئ-غفقل-وُٹ-پچڈڑژکگںھہیےਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਵਸਹ਼ਾ-ੂੇੈੋ-੍ੜ੦-ੴ‌-‏]|ਖ਼|ਗ਼|ਜ਼|ਫ਼|ਲ਼|ਸ਼)+$", + "^([a-zäëïöŋɔɛɣ]|a̱|e̱|i̱|o̱|ɔ̈|ɔ̱|ɛ̈|ɛ̱|ɛ̱̈)+$", + "^([a-zß-ëí-öø-ÿāăąćċčďđēėęěğģħīį-ıķĺļľłńņňŋőœŕřśŝşšţťŧūůűųźżžǥǧǩǯșțȟʒ])+$", + "^([ஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-வஷ-ஹா-ூெ-ைொ-்‌‍])+$", + "^([a-záéíóúŋǝɔɛ]|ǝ́|ɔ́|ɛ́)+$", + "^([a-z])+$", + "^([à-èê-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ])+$", + "^([ઁ-ઃઅ-ઋઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ૰‌‍])+$", + "^([a-z])+$", + "^([ꀀ-ꒌ])+$", + "^([a-zçöüğİışəа-яјғҝүҹһәө])+$", + "^([a-z]|sh)+$", + "^([a-zćčđšžа-ик-шђј-ћџ]|dž|lj|nj)+$", + "^([0U𑄃-𑄦𑄬])+$", + "^([a-z])+$", + "^([a-záéíñóúŋ])+$", + "^([က-ဴံ-၉၏-ၚၢၤၥၵၽၾႆႈႊႏ])+$", + "^([a-zàáãèéìíñ-óõùúąčėęĩįšũūųžẽ]|ch|dz|dž|i̇̀|i̇́|i̇̃|j̃|j̇̃|l̃|m̃|r̃|ą́|ą̃|ė́|ė̃|ę́|ę̃|į́|į̃|į̇́|į̇̃|ū́|ū̃|ų́|ų̃)+$", + "^([a-zà-âè-êì-îò-ôù-ûāēīŋōūɔɛɨʉ]|ny|rr|sh|wu|yi|ʉ́)+$", + "^([a-zà-âè-êì-îò-ôù-ûěńŋǎǐǒǔǹɔəɛ]|dz|kp|ng|nk|ts|ɔ̀|ɔ́|ɔ̂|ɔ̌|ə̀|ə́|ə̂|ə̌|ɛ̀|ɛ́|ɛ̂|ɛ̌)+$", + "^([a-pr-z])+$", + "^([a-záéíóúŋūɓɔɗɛ]|ny|ɔ́|ɛ́)+$", + "^([ء-غف-ْٰٖٔپچژکگی‌-‏])+$", + "^([a-z])+$", + "^([ሀ-ሆለ-ቆቈቊ-ቍበ-ኆኈኊ-ኍነ-ኮኰኲ-ኵኸ-ኾወ-ዎዐ-ዖዘ-ዮደ-ዷጀ-ጎጐጒ-ጕጠ-ፆፈ-ፗ])+$", + "^([a-zâåè-êìòù])+$", + "^([a-zāēģīķņōŗšūžțḑ])+$", + "^([a-zãõŋšžɲẽ])+$", + "^([ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፟ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ])+$", + "^([a-zàâè-ìîïñô])+$", + "^([a-z])+$", + "^([a-zå])+$", + "^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏőœūŭű]|ccs|cs|ddz|ddzs|dz|dzs|ggy|gy|lly|ly|nny|ny|ssz|sz|tty|ty|zs|zzs)+$", + "^([a-z])+$", + "^([a-zß-ïñ-ôöø-ýÿāăąćčďđēĕėęěğīĭİıĺľłńňōŏőœŕřśşšťūŭůűźżž]|ch|dź)+$", + "^([a-ik-zàâèêìîòôùûāēěīŋōūǎǐǒǔɔɛɨʉʔ]|ɔ̀|ɔ̂|ɔ̄|ɔ̌|ɛ̀|ɛ̂|ɛ̄|ɛ̌|ɨ̀|ɨ̂|ɨ̄|ɨ̌|ʉ̀|ʉ̂|ʉ̄|ʉ̌)+$", + "^([a-zčǧɛɣḍḥṛṣṭẓ])+$", + "^([a-záâéêíîóôúěǎǐǒɔɛ]|gb|mb|mp|nd|ng|nk|ns|nt|ny|nz|ɔ́|ɔ̂|ɔ̌|ɛ́|ɛ̂|ɛ̌)+$", + "^([a-zäçöüýňşž])+$", + "^([a-z])+$", + "^([ঁ-ঃঅ-ঋএঐও-নপ-রলশ-হ়া-ৃেৈো-ৎৰ-৲‌‍]|ক্ষ|ড়|ঢ়|য়)+$", + "^([a-zñ])+$", + "^([a-zß-ïñ-ôöø-ýÿāăąćčďđēĕėęěğīĭİıĺľłńňōŏőœŕřśşšťūŭůűźżž]|ch)+$", + "^([а-яёҗүһӊәө])+$", + "^([a-z])+$", + "^([a-zʼа-яёўғқҳء-ؤئ-غفقل-وي-ْٰٔټپځڅچډړږژښکګگڼۇۉیۍې‌-‏]|ch|gʻ|oʻ|sh)+$", + "^([a-z])+$", + "^([ᏸ-ᏼꭰ-ꮿ])+$", + "^([آ-غؽف-ْٔٙٛپچژڤکگھۉۊیە​-‏])+$", + "^([a-z·ºà-ïñ-ôöø-üÿāăēĕīĭŀōŏœūŭ])+$", + "^([a-zà-ãçéêíò-õú])+$", + "^([a-zäöü])+$", + "^([a-zß-ïñ-ôöø-üÿāăēĕğīĭİıōŏœşūŭ])+$", + "^([0Ua-zñŋƴɓɗ𞤢-𞥃𞥋])+$", + "^([一丁七万-与丑专且世丘-业东丝丟丢两-並个中丰串临丸-主丽举乃久么义之-乐乔乖乘乙九也-乡书买乱乾亂了予争事二于亏云互五井亚些亞亡交-亨享京亮亲人亿-仂仅仇今介仍从仑仔他付仙代-以仪们仰仲件价任份企伊伍伏-休众-会伟传伤伦伯估伴伸似伽但佈佉位-佐体-何余佛作你佩佳使來例供依侠侣侦-侨侯侵侶便係-俄俊俗保俠信修俱俾個倍們倒候倚借倫值倾假偉偏做停健側-偷傑備傢傣傲傳傷傻傾僅像僑僧僳價儀億儒儘優儿允元-光克-免兑兒兔党入內-兩八-兮兰共关-兹养-兽内冈冊册再冒写军农冠冬冰冲决况冷净准凉凌减凝几凡凤凭凯-凱凶凸出击函刀分切刊划列-创初删判別利-别到制-券刺刻則剌前剑剛剧剩剪副割創劃劇劉劍力劝-务动-劫励-劳势勁勇勉勋勒動務勝勞勢勤勳勵勸勿包匈化北匹-医區十千升午半华协卑-南博卜卞占-卢卧卫卯-危即却卷卻厂厄-历厉压厌厘厚原厭厲去县参參又及-反发叔取-叙口-另只-叭可台史右叶-叹吃各合-吊同-后吐-吓吕吗君吝-吠否吧含听启吳-吵吸吹吾呀呂呆告员呜呢周味呵呼命咀和咖咤咦咧咪咬咱哀品哇-哉响哎員哥哦哩哪哭哲唉唐唔唬售唯唱唷唸商啊問啟啡啥啦啪啰喀喂善喇喊喔喜喝喬單喵喷嗎嗚嗨嗯嘅嘆嘉嘗嘛嘴嘻嘿器噴嚇嚴囉四回因团园困围固国图圆圈國圍園圓圖團圜土圣在圭地场圾址均坎-坐块坚-坜坡坤坦坪垂垃型垒埃城埔域執培基堂堅堆堕堡堤堪報場塊塔塗塞填塵境墎墙增墨墮壁壇壓壘壞壢壤士壬壮-声壳壽处备复夏夕外多夜够夠夢夥大天-夫央失头夷-夺夾奇-奉奋奎奏契奔奖套奥奧奪奮女奴奶她好如妆-妈妙妝妥妨妮妳妹妻姆姊始姐姑姓委姿威娃娄娘娛娱婁婆婚婦媒媽嫌嫩子孔字-孙孜孝孟季孤学孩孫學宁它宅宇-安宋完宏宗-实宠-室宪宫宮害家容宽-宿寂寄-密富寒寝-察寢實-審寫寬寮寵寶对寻导寿封射将-專尊尋對-小少尔尖尘尚尝尤就尺尼-尾局-层居屆届屋屏展属屠層屬山屿岁岂岚岛岡岩岭岸峇峡峰島峽崇崙崴嵐嶺嶼川州巡工-巨巫差己-巴巷巽币-布帅师希帐帕帖帛帝帥带師席帮帳帶常帽幅幕幣幫干-年并幸幹幻-广庄庆庇床序库-底店庚府废度座庫庭康庸廉廖廠廢廣廳延廷建开异-弄式引弗弘弟张弥弦弯弱張強弹强彈彊彌彎归当录彝彞形彥彦彩彬彭彰影役彻彼往征径待很律後徐-徒得從復微徵德徹心必忆忌忍志-忙忠忧快念忽怀态怎怒怕怖怜思怡急性怨怪总恆恋恐恒恢恥恨恩恭息恰恶恼悅悉悔悟悠悦您悲悶情惊惑惜惠惡惧惨惯惱想惹愁愈愉意愚愛感愿慈態慕慘慢慣慧慮慰慶慾憂憐憑憲憶憾懂應懒懶懷懼戀戈戊戌戏-戒或战截戰戲戴戶户房-扁扇手才扎打托扣扥执扩扫-扭扯扰批找-技抄把抓投抗折抛抢护报披抬抱抵抹抽担拆拉拋拍拏拒拔拖招拜拟拥拨择括拳拼拾拿持挂指按挑挖挝挡挤挥挪振挺捐捕损捡换捨据捲捷掃授掉掌排掛採探接控推措掸描提插揚換握揮援損搖搜搞搬搭搶摄摆摇摘摩摸撐-撒撞撣撥播撾撿擁擇擊擋操擎擔據擠擦擬擴擺擾攝支收改攻放政故效敌敍敏救敗-教敝敢散敦敬数整敵數文斋斐斗料斜断斯新斷方於施旁旅旋族旗无既日-旧早旭时旺昂昆昇昌明昏易昙星映春昨昭是昼显時晉晋晒晓晚晨普景晴晶智暂暑暖暗暫暴曆曉曰曲更書曼曾-最會月有朋服朗望朝期木未-札术朱朵机杀杂权杉李材村杜束条来杨杯-東松板极构析林果枝枢枪枫架柏某染柔查柬柯柳柴标栏树栗校样-根格桃案桌桑档桥梁梅條梦梨梯械梵检棄棉棋棒棚森椅植椰楊楓楔楚業極楼概榜榮構槍樂樓標樞模樣横樹橋機橫檀檔檢欄權次-欣欧欲欺欽款歉歌歐歡-武歲歷歸死殊残殘段殺殼毀毁毅母每毒比毕毛毫氏民气氣水永求汉汗汝江-污汤汪汶決汽沃沈沉沒沖沙沟没沧河油治沿況泄泉泊法泡波泥注泪泰泳泽泾洁洋洗洛洞洩洪洲活洽派流浅测济浏浑浓浦浩浪浮海涂涅涇-涉涛涨涯液涵涼淑淚淡淨深混淺清渐減渡温測港游渾湖湘湯湾源準溝溪溫滄滅滋滑滚满滥滨滴滾滿漂漏演漠漢漫漲漸潔潘潛潜潮澎澤澳激濃濟濤濫濱瀏灌灘灣火灭灯灰灵災-灿炉炎炮炸-為烂烈烏烟烤烦烧热無焦然煙煞照煩熊熟熱燃燈燒營燦爆爐爛爪爬爭爱爵-爸爺爽爾牆-版牌牙牛牠牧物牲牵特牺牽犧犯状犹狀狂狄狐狗狠独狮狱狼猛猜猪猫献猴猶獄獅獎獨獲獸獻玄率玉王玛玩玫环现玲玻珊珍珠珥班現球理琉琪琳琴瑙瑚瑜瑞瑟瑤瑪瑰瑶環瓜瓦瓶甘甚甜生產用甫田-申电男甸画界留畢略番畫異當疆疏疑疗疯疼病痕痛痴瘋療癡癸登-百的皆皇皮盃益监盖-盘盛盜盟盡監盤盧目盲直相盼盾省眉看真眠眼眾着睛睡督瞧瞭矛矣知短石矶码砂砍研砲破础硕硬确碍碎碑碗碟碧碩碰確碼磁磨磯礁礎礙示礼社祕祖祚祛祝神祥票祯祸祿禁禄禅禍-福禪禮离秀私秋种科秒秘租秤秦积称移稅程稍税稣種稱稳稿穆穌積穩究穷穹空穿突窗窝窩窭窮窶立站竞-章童端競竹笑笔笛符笨第筆等筋筑答策筹签简算管箫箭箱節範篇築篮簡簫簽簿籃籌籍籤米类粉粗粤粵精糊糕糟系糾紀約紅納紐純紙-紛素索紧紫累細紹終組結絕絡給統絲經綜綠維綱網緊緒線緣編緩緬緯練縛縣縮縱總績繁繆織繞繪繳繼續纜纠红约级纪纬纯纲纳纵纷纸纽线练组细-终绍经结绕绘给络绝统继绩绪续绰维综绿缅缓编缘缚缩缪缴缸缺网罕罗罚罢罪置罰署罵罷羅羊美羞群義羽翁習翔翘翰翹翻翼耀老考者而耍耐耗耳耶耻聊职联聖聚聞聪聯聰聲職聽肉肚股肥肩肯育胆背胎胖胜胞胡胸能脆脑脚脫脱脸腊腓腔腦腰腳腿膽臉臘臣臥臨自臭至致臺與-舊舌舍舒舞舟航般舰船艇艦良色艺艾节芒芝芦芬花芳苍苏苗若苦英范茅茨茫茲茵茶草荐荒荣药荷荼莉莊莎莫莱莲获菜菩華菲萄萊萤营萧萨萬落葉著葛葡蒂蒋蒙蒲蒼蓋蓝蓬蓮蔕蔡蔣蕭薄薦薩薪藉藍藏藝藤藥蘆蘇蘭虎虑處虚虛號虧虫虽蚩蛇蛋蛙蛮蛰蜀蜂蜜蝎蝶融螢蟲蟹蠍蠻血行術街衛衝衡衣补表袋被裁裂装裕裘補裝裡裤製複褲西要覆見規視親覺覽觀-观规视览觉角解触觸言訂計訊討訓託記訥訪設許訴註証評詞詢試詩話-詳誇誉誌認誓誕語誠誤說誰課誼調談請諒論諸諺諾謀謂講謝謬證識譜警譯議護譽讀變讓讚计订认讨让训-记讲讷许论设访证评识诉词译试诗诚话诞询该详语误说请诸诺读课谁调谅谈谊谋谓谚谢谬谱谷豆豈豐象豪豬貌貓貝貞負-貢貨貪-責貴買費貼賀資賈賓賜賞賢-賤賦質賭賴賺購賽贈贊贏贝-负贡-败货质贪购贯贱贴贵费贺贾资赋赌赏赐赖赚赛赞赠赢-赤赫走赵-起超越趋趕趙趣趨足跃跌跎跑距跟跡路跳踏踢踪蹟蹤躍身躲車軌軍軒軟較載輔輕輛輝輩輪輯輸轉轟车轨轩转轮-轰轻载较辅辆辈辉辑输辛辞辦辨辩辭辯-農边达迁迅过迈迎运近返还这进-迟迦迪迫述迴迷迹追退-逃逆选逊透逐途這-逛逝速造逢連週進逸逻逼遇遊運遍過道-違遗遙遜遠遥適遭遮遲遷選遺避-邁還邊邏那邦邪邮邱邻郁郎郑部郭郵都鄂鄉鄭鄰酉酋配酒酷酸醉醒醜醫采释-量金針釣鈴鉢鉴銀銅銖銘銳銷鋒鋼錄錢錦錫錯鍋鍵鍾鎊鎖鎮鏡鐘鐵鑑针钓钟钢钦钱钵铁铃铜铢铭银销锁锅锋锐错锡锦键镇镑镜長长門閃閉開閏閒間閣閱闆闊闍闐關闡门闪闭问闰闲间闷闹闻闽阁阅阇阐阔阗队防-阶阻阿陀附-陈降限院-除险陪陰陳陵-陸陽隆隊階-隐隔際障隨險隱隴隻难雀雄-集雉雖雙雜雞離難雨雪雲雳零雷電雾需震霍霜霧露霸霹靂靈青靖静靜非靠面革靼鞋鞑韃韋韓韦韩音韵韻響頁頂項順須預頑頓頗領頞頭頻顆題額顏願類顧顯页顶项-须顽-顿预领颇频颗题颜额風飄风飘飛飞食飯飲飽飾餅養餐餘館饭饮饰饱饼馆首香馬駐駕駛騎騙騷驅驗驚马驱驶驻驾骂验骑骗骚骨體高髪髮鬆鬥鬧鬱鬼魁魂魅魔魚魯鮮鱼鲁鲜鳥鳳鳴鴻鵝鷹鸟鸡鸣鸿鹅鹰鹿麗麥麦麵麻麼黃黄黎黑默點黨鼓鼠鼻齊齋齐齒齡齿龄龍龙龜龟])+$", + "^([a-zàâåç-ìîïñ-ôùûüčğš])+$", + "^([a-zɛɣḍḥṛṣṭ]|gʷ|kʷ)+$", + "^([a-zà-âè-êì-îò-ôù-ûŋnjɓɔɗɛ]|a̧|gb|gw|i̧|kp|kw|mb|nd|ny|u̧|ŋg|ŋgb|ŋgw|ɔ̀|ɔ́|ɔ̂|ɔ̧|ɗy|ɛ̀|ɛ́|ɛ̂|ɛ̧)+$", + "^([a-z]|ai|au|dz|kh|ng|ngg|ny|sy|ts|ua)+$", + "^([а-ёѝѣѫ]|а̀|о̀|у̀|ъ̀|ю̀|я̀)+$", + "^([а-яё]|а́|е́|и́|о́|у́|ы́|э́|ю́|я́)+$", + "^([a-záãéíóõúĩŋũɓɔɗɛẽꔀ-ꘌꘐ-ꘟꘪꘫ]|ɔ́|ɔ̃|ɛ́|ɛ̃)+$", + "^([a-zćčđšž]|dž|lj|nj)+$", + "^([a-zàáèéìíòóùúɔɛṣẹọ]|gb|sh|ɔ̀|ɔ́|ɛ̀|ɛ́|ẹ̀|ẹ́|ọ̀|ọ́)+$", + "^([a-zß-ïñ-ôöø-üÿāăēĕėğīĭıijłōŏœūŭů])+$", + "^([ංඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟෲෳ​-‍])+$", + "^([؀ء-ؤئ-غفقل-وي-ْٖٔ-ٰ٘ٹ-پچڈڑژکگںھہ-ۃیے])+$", + "^([a-zà-âè-êì-îñ-ôù-û]|ng)+$", + "^([a-z])+$", + "^([ΐά-ώἀ-ἇἐ-ἕἠ-ἧἰ-ἷὂ-ὄὐ-ὗὢ-ὧὰὲὴὶὸὺὼᾶῆῒῖῗῢῦῧῶ])+$", + "^([a-zà-âä-ëí-ïñóôöø-üÿœǿ])+$", + "^([一丁七万-与丑专且世丘-业东丝丟丢两-丧个中丰串临丸-主丽举乃久么义之-乐乒-乔乖乘乙九也-乡书买乱乳乾亂了予争事二于亏云互五井亚些亞亡交-亨享京亮亲人亿-仂仅仇今介仍从仓仔他付仙代-以仪们仰仲件价任份仿企伊伍伏-休众-会伞-传伤伦伯估伴伸似伽但佈佉位-佑体-何余佛作你佤佩佳使來例供依侠侣侦-侨侬侯侵侶便係-俄俊俗保俠信俩修俱俾個倍們倒候倚借倦倫值倾假偉偌偏做停健側-偷傈傑備傢傣储催傲傳傷傻傾僅像僑僧僳價儀億儒儘優儿允元-光克-免兑兒兔党入內-兩八-兮兰共关-兹养-兽内冈冊册再冒写军农冠冥冬冰冲决况冷准凉凌减凝几凡凤凭凯-凱出击函刀分切刊刑划列-创初判別刨-别到制-券刺刻剂則剌前剑剛剧剩剪副割創劃劇劉劍力劝-务劣动-劫励-劳势勁勇勉勋勒動務勝勞勢勤勳勵勸勾勿包匆匈匕-北匙匣匹-医區十千升午半华协卑-南博卜卞占-卢卫卯-危即却卷卻厂厄-历厉压-厍厘厚原厦厨厭厲去县参參又-反发叔取-叙口-另只-叭可台史右叶-叹吃各合-吊同-后吐-吓吕吗君吝-吠否吧含听启吳吵吸吹吻吾呀呂呆呈告呐员呜呢呣呦周味呵呼命和咖咦-咨咪咬咯咱哀品哇-哉响哎哟員哥哦哩哪哭哲哺唇唉唐唔唤唬售唯唱唷唸商啊問啟啡啤-啦啪啮喀喂善喇喊喏喔喜喝喬單喱喵喷喻嗅嗎嗒嗚嗨嗯嘆嘉嘗嘛嘟嘴嘻嘿噘噢器噴嚇嚴囉四回因团园困围固国图圆圈國圍園圓圖團圜土圣在圭地圳场圾址均坎坐坑块坚-坝坡坤坦坪垂垃型垒埃埋城埔域執培基堂堅堆堕堡堤堪報場塊塑塔塗塞填塵境墎增墟墨墮壁壇壓壘壞壢壤士壬壮-声壽处备复夏夕外多夜够夠夢夥大天-夫央失头夷-夺夾奇-奉奋奎奏契奔奖套奥奧奪奮女奴奶她好如妆-妈妖妙妝妥妨妮妳妹妻姆姊始姐姑姓委姿威娃娄娘娛娜娟娱婁婆婚婦婴媒媚媽嫁嫌嫩嬰子孔孕字-孙孜孝孟季孤学孩孫學宁它宅宇-安宋完宏宗-实审-室宪宮害宴家容宽-宿寂寄-寇富寒寝-察寡寢實-審寫寬寮寵寶寸-导寿封射将-專尊尋對-小少尔尖尘尚尝尤尬就尴尺尼-尾局-层居屆屋屏屑展属屠層屬山屿岁岂岗岘岚岛岡岩岳岸峇峡峰島峽崇崙崩崴嵐嶺嶼川州巡工-巨巫差己-巴巷巽巾币-布帅帆师希帐帕帖帛帝帥带師席帮帳帶常帽幅幕幣幫干-年并幸幹幻-广庆庇床序库-底店庙庚府庞废度座庫庭康庸廁廉廖廚廠廢廣廳延廷建开异-弄弊弋式弓引弗弘弟张弥弦弯弱張強弹强彈彊彌彎归当录彗彝彞形彥彩彬彭彰影彷役彻彼往征径待很律後徐-徒得從復循微徵德徹心必忆忌忍志-忙忠忧快念忽怀态怎怒怕怖思怡急性怨怪总恆恋恐恢恥恨恩恭息恰恶恼悄悅悉悔悟悠患您悲悶情惊惑惜惠惡惧惨惯惱想惹愁愈愉意愚愛感愧慈態慎慕慘慢慣慧慮慰慶慾憂憐憑憲憶憾懂應懒懶-懸懼戀戈戊戌戏-戒或战戟截戰戲戴戶户房-扁扇手才扎扑打扔托扣扥执扩扫-扰扳批找-技抄把抑抓投抗折抛抢护报披抬抱抵抹抽担拆拉拋拍拏拒拔拖拘招拜拟拥拦拨择括拳拷拼拾拿持挂指按挑挖挝挡挤挥挪振挺捂捉捐捕损捡换捨据捲捷掃授掉掌排掛採探接控-措掸描提插揚換握揮援損搖搜搞搬搭搶摄摆摇摊摔摘摩摸撅撐撒撞撣-撥播撾撿擁擇擊擋操擎擔據擠擦擬擴擺擾攝支收改攻放政故效敌敍敏救敗-教敝敢散敦敬数敲整敵數文斋斐斗料斜斥断斯新斷方於施旁旅旋族旗无既日-早旭时旺昂昆昇昌明昏易星映春昨昭是显時晃晉晋晒晓晚晨普景晴晶智暂暈暑暖暗暫暮暴曆曉曰曲更書曹曼曾-最會月有朋服朗望朝期木未-札术朱朵机杀杂权杆杉李材村杖杜束条来杨杯-東松板极构析林果枝枢枪枫架柏某染柔柜查柬柯柱柳柴标栋栏树栗校样-根格栽桃框案桌桑档桥桶桿梁梅條梦梨梯械梵检棄棉棋棍棒棕棚森棺椅植椰楊楓楔楚楠業極楼概榈榜榮構槍槟樂樓標樞模樣樱樹橋橙機橫檀檔檢櫃欄權欠-欣欧欲欺欽款歉歌歐歡-武歪歲歷歸死殊残殘段殺殼毀毅母每毒比毕毛毫氏民气氛氣水永求汇汉汗汝江-污汤汪汶決汽沃沈沉沒沖沙沟没沧河油治沿況泉泊法泛泡-泣泥注泰泳泽洋洒洗洛洞津洩洪洲活洽派流浅浆测济浏浑浓浙浦浩浪浮浴海涅涇-涉涌涛涨涯液涵涼淇淋淑淘淚淡淨深混淺添清渐減渡渣温測港渴游渾湖湯湾源準溜溝溪溫滄滅滋滑滕滚满滥滨滩滴滾滿漂漏演漠漢漫漲漸潔潘潛潜潮澎澤澳激濃濟濤濫濱瀏灌灣火灭灯灰灵災-灿炉炎炮炸-為烂烈烏烛烟烤烦烧热無焦焰然煌煎煙煞照煩煮熊熟熱燃燈燒燕營燦燭爆爐爛爪爬爭爱爵-爸爺爽爾牆-版牌牙牛牠-牢牧物牲牵特牺牽犧犬犯状犹狀狂狄狐狗狠独狮狱狼猛猜猪猫献猴猶獄獅獎獨獲獸獻玄率玉王玛玩玫环现玲玻珀珊珍珠珥班現球理琉琊琪琳琴琼瑙瑚瑜瑞瑟瑤瑪瑰瑶璃環瓜瓢瓦瓶甘甚甜生產用甫田-申电男甸画畅界留畢略番畫異當疆疊疏疑疗疯疲疼疾病痕痛痴瘋療癡癸登-百的皆皇皮皱皺盃盆盈益监盒盔盖盘盛盜盟盡監盤盧目盲直相盼盾省眉看真眠眨眩眯眼眾着睛睡督瞌瞧瞭矛矣知短石矶矿码砂砍研砲破础硕硬确碍碎碑碗碟碧碩碰確碼磁磅磨磯礁礎礙示礼社祈祕祖祚祛祝神祥票祭祯祷祸祿禁禄禅禍-福禪禮离秀私秋种科秒秘租秤秦秩积称移稀稅程稍税稣種稱稳稻稿穆穌積穩究穷穹空穿突窗窝窩窮窶立站竞-章童端競竹竿笑笔笛符笨第笼筆等筋筑筒答策筹签简算管箭箱節範篇築篮篷簍簡簫簽簿籃籌籍籤米类粉粒粗粟粤粮粵粹精糊糕糖糟糰系糾紀約紅紋納紐純紗紙-紛素索紧紫累細紹終組結絕絡給統絲經綜綠維綱網緊緒線緣編緩緬緯練縛縣縮縱總績繁繆織繞繪繳繼續纏纜纠红约级纪纬纯纲纳纵纷纸纽线练组细-终绍经结绕绘给络绝统继绩绪续维绵综绿缅缆缎缓编缘缠缩缴缶缸缺罐网罕罗罚罢罪置罰署罵罷羅羊美羞群義羯羽翁翅習翔翘翠翰翹翻翼耀老考者而耍耐耗耳耶耸聊职联聖聘聚聞聪聯聰聲聳職聽肉肖肚股肤肥肩肯育胁胆背胎胖胜胞胡胶胸能脆脑脚脫脱脸腊腐腓腔腦腰腳腹腾腿膽臂臉臘臣臥臨自臭至致臺與-舊舌舍舒舔舞舟航般舰舵船艇艦艮良色艺艾节芒芝芦芬芭花芳芽苍苏苗苜苞若苦英茂范茅茨茫茲茶草荐荒荣药荷荼莉莊莎莪莫莱莲获菇菜菩華菱菲萄萊萍萤营萧萨萬落葉著葛葡葫葵蒂蒋蒙蒲蒸蒼蓉蓋蓝蓬蓮蓿蔑蔕蔡蔣蔽蕭薄薦薩薪薯藉藍藏藝藤藥蘆蘇蘑蘭虎虑處虛號虧虫虹虽虾蚁蚂蚩蛇蛋蛙蛛蛮蜀蜂蜗蜘蜜蜡蝎蝴蝶蝸螃融螢蟲蟹蠍蠟蠢蠻血行術街衛衝衡衣补表袋被袭裁裂装裕裘裙補裝裡裤裹製複褲西要覆見規視親覺覽觀-观规视览觉角解觸言訂計訊討訓託記訥訪設許訴註証評詞詢試詩話-詳誇誉誌認誓誕語誠誤說誰課誼調談請諒論諸諺諾謀謂講謝謬證識譜警譯議護譽讀變讓讚计订认讨让训-记讲讷许论设访证评识诉词译试诗诚话诞询该详语误说请诸诺读课谁调谅谈谊谋谍谓谜谢谨谬谱谷豆豈豐豚象豪豬貌貓貝貞負-貢貨貪-責貴買費貼賀資賈賓賜賞賢-賤賦質賭賴賺購賽贈贊贏贝-负贡-贪购贯贱贴贵贸-贺贼贾资赋赌赏赐赔赖赚赛赞赠赢赤赫走赵起趁超越趋趕趙趣趨足跃跌跎跑距跟跡跤跨路跳踏踢踩踪蹟蹤躍身躬躲車軌軍軒軟較載輔輕輛輝輩輪輯輸轉轟车轨轩转轮-轰轴轻载较辅辆辈辉辐辑输辛辞辦辨辩辭辯-農边达迁迅过迈迎运近返还这进-迟迦迪迫述迴迷迹追退-逃逆选逊透逐递途這-逛逝速造逢連週進逸逻逼遇遊運遍過道-違遗遙遜遞遠適遭遮遲遵遷選遺避-邁還邊邏邓那邦邪邮邱邻郁郎郑部郭郵都鄂鄉鄙鄭鄰酉酋配酒酢酷酸醉醒醜醫采释-量金釘針釣鈔鈕鈴鉛鉢銀銅銖銘銳銷鋒鋼錄錢錦錫錯鍋鍵鍾鎊鎖鎚鎬鎮鏡鐘鐵鐺鑑鑰鑽针钉钓钟钢钥钦钮钯钱钻铁-铃铅铛铜铢铭银铺链销锁锄锅锋锑错锚锡锤锦键锺镇镑镜镭長长門閃閉開閏閒間閣閱闆闊闍闐關闡门闪闭问闰闲间闷闹-闻阁阅阐阔队阮阱-阶阻阿陀附-陆陈降限院-除险陪陰陳陵-陸陽隆隊階-隐隔際障隧隨險隱隴隻难雄-集雉雕雖雙雜雞離難雨雪雯雲雳零雷電雾需霄震霍霖霧露霸霹霾靂靈青靖静靜非靠面革靴靶靼鞋鞑鞠韃韋韓韦韩音韻響頁頂項順須預頑頓頗領頞頭頻顆題額顏願類顧顯页顶项-须顽-顿预领颇频颗题额颠風飄风飘飙飛飞食飯飲飽飾餅養餐餘館餵饭饮饰饱饼馆馏首香馨馬駐駕駛騎騙騷驅驗驚马驱驶驻驼驾骆验骑骗骚骤骨骰骷髏體高髦髮鬆鬥鬧鬱鬼魁魂魅魔魚魯鮮鯉鱼鲁鲜鲤鲸鳄鳥鳳鳴鳶鴻鵝鷹鸟鸡鸣鸭鸽鸿鹅鹤鹰鹿麗麥麦麵麻麼黃黄黎黑默點黨鼓鼠鼻齊齋齐齒齡齿龄龍龙龜龟])+$", + "^([a-zĩũ])+$", + "^([a-z])+$", + ]).unwrap() +}); + +pub static RE_ORM: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_NNO: Lazy = Lazy::new(|| Regex::new("^([a-zàáä-êñ-ôöøüčđńŋšŧžǎ])+$").unwrap()); +pub static RE_MRI: Lazy = Lazy::new(|| Regex::new("^([a-zāēīōū]|ng|wh)+$").unwrap()); +pub static RE_AST: Lazy = Lazy::new(|| Regex::new("^([a-zªºà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭḥḷ])+$").unwrap()); +pub static RE_JGO: Lazy = Lazy::new(|| Regex::new("^([a-záâíîúûńŋǎǐǔǹɔɛʉḿẅꞌ]|m̀|m̄|n̄|pf|sh|ts|ŋ̀|ŋ́|ŋ̄|ɔ́|ɔ̂|ɔ̌|ɛ̀|ɛ́|ɛ̂|ɛ̄|ɛ̌|ʉ́|ʉ̂|ʉ̈|ʉ̌)+$").unwrap()); +pub static RE_FAS: Lazy = Lazy::new(|| Regex::new("^([ء-غـ-ْٰٖٔټپځڅچډړږژښکګگڼی‌-‏])+$").unwrap()); +pub static RE_SAQ: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_SHI: Lazy = Lazy::new(|| Regex::new("^([a-zɛɣḍḥṛṣṭⴰⴱⴳⴷⴹⴻ-ⴽⵀⵃ-ⵅⵇⵉⵊⵍ-ⵏⵓ-ⵖⵙ-ⵜⵟⵡ-ⵣⵥ]|gʷ|kʷ|ⴳⵯ|ⴽⵯ)+$").unwrap()); +pub static RE_SLK: Lazy = Lazy::new(|| Regex::new("^([a-zà-âä-ïñ-ôöø-ýÿāăčďēĕīĭĺľňōŏőœŕřšťūŭűž]|ch|dz|dž)+$").unwrap()); +pub static RE_LUG: Lazy = Lazy::new(|| Regex::new("^([a-zŋ]|ny)+$").unwrap()); +pub static RE_BAS: Lazy = Lazy::new(|| Regex::new("^([a-zà-âè-êì-îò-ôù-ûāēěīńŋōūǎǐǒǔǹɓɔɛ]|a᷆|a᷇|e᷆|e᷇|i᷆|i᷇|o᷆|o᷇|u᷆|u᷇|ɔ̀|ɔ́|ɔ̂|ɔ̄|ɔ̌|ɔ᷆|ɔ᷇|ɛ̀|ɛ́|ɛ̂|ɛ̄|ɛ̌|ɛ᷆|ɛ᷇)+$").unwrap()); +pub static RE_SQI: Lazy = Lazy::new(|| Regex::new("^([a-zçë]|dh|gj|ll|nj|rr|sh|th|xh|zh)+$").unwrap()); +pub static RE_SBP: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_KEA: Lazy = Lazy::new(|| Regex::new("^([a-zªºà-ïñ-öø-üÿāăēĕĩīĭōŏœũūŭẽ]|dj|lh|nh|n̈|rr|tx)+$").unwrap()); +pub static RE_GLG: Lazy = Lazy::new(|| Regex::new("^([a-zªºà-åç-ïñ-öù-ü])+$").unwrap()); +pub static RE_CHE: Lazy = Lazy::new(|| Regex::new("^([а-яё]|аь|гӏ|ий|кк|ккх|кх|кь|кӏ|ов|оь|пп|пӏ|рхӏ|сс|тт|тӏ|ув|уь|уьй|хь|хӏ|цӏ|чӏ|юь|яь)+$").unwrap()); +pub static RE_NNH: Lazy = Lazy::new(|| Regex::new("^([a-zà-âè-êìíò-ôù-ûÿěńŋǎǒǔɔɛʉʼḿẅ]|pf|sh|ts|ɔ̀|ɔ́|ɔ̂|ɔ̌|ɛ̀|ɛ́|ɛ̂|ɛ̌|ʉ̀|ʉ́|ʉ̂|ʉ̌)+$").unwrap()); +pub static RE_HIN: Lazy = Lazy::new(|| Regex::new("^([ँ-ःअ-ऍए-ऑओ-नप-रलळव-ह़-ॅे-ॉो-्ॐ‌‍])+$").unwrap()); +pub static RE_COR: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_TON: Lazy = Lazy::new(|| Regex::new("^([a-zà-âä-ïñ-ôöø-üÿāăēĕīĭōŏœūŭʻ]|ng)+$").unwrap()); +pub static RE_UIG: Lazy = Lazy::new(|| Regex::new("^([ئ‎‏])+$").unwrap()); +pub static RE_WOL: Lazy = Lazy::new(|| Regex::new("^([a-zàãéëñóŋ])+$").unwrap()); +pub static RE_AFR: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïò-ôöù-ý])+$").unwrap()); +pub static RE_ZUL: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ]|bh|ch|dl|dy|gc|gq|gx|hh|hl|kh|kl|kp|nc|ngc|ngq|ngx|nhl|nk|nkc|nkq|nkx|nq|ntsh|nx|ny|ph|qh|rh|sh|th|tl|ts|tsh|xh)+$").unwrap()); +pub static RE_DJE: Lazy = Lazy::new(|| Regex::new("^([a-zãõŋšžɲẽ])+$").unwrap()); +pub static RE_NOB: Lazy = Lazy::new(|| Regex::new("^([a-zàáã-êíñ-ôöøúüčđńŋšŧžǎ])+$").unwrap()); +pub static RE_SMN: Lazy = Lazy::new(|| Regex::new("^([a-zà-éíñ-óöøúüčđńŋšž])+$").unwrap()); +pub static RE_PUS: Lazy = Lazy::new(|| Regex::new("^([ء-ؤئ-غفقل-وي-ْٰٔټپځڅچډړږژښکګگڼیۍېے‌-‏])+$").unwrap()); +pub static RE_LUO: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_JPN: Lazy = Lazy::new(|| Regex::new("^([々ぁ-んゝゞヴ-ヶー一丁七万-下不与丑且世丘丙両並中丸丹主久乏乗乙九乱乳乾亀了予争事二互五井亜亡交亥亨享-亭人仁今介仏仕他付仙代-以仮仰仲件任企伏-休会伝伯伴伸伺似但位-佐体何余作佳併使例侍供依価侮侯侵便係促俊俗保信修俳俵俸俺倉個倍倒候借倣値倫倹偉偏停健側-偶偽傍傑傘備催債傷傾働像僕僚僧儀億儒償優元-兆先光克-兎児党入全八-六共兵具典兼内円冊再冒冗写冠冬冷准凍凝凡処凶凸-出刀刃分-刈刊刑列初判別利到制-券刺刻則削前剖剛剣-剥副剰割創劇力功加劣助努励労効劾勅勇勉動勘務勝募勢勤勧勲包化北匠匹-医匿十千升午半卑-協南単博占卯-危即-卵卸厄厘厚原厳去参又及-収叔取受叙口-句叫召可-右号司各合吉同-向君吟否含吸吹呈-告周味呼命和咲哀品員哲唆唇唐唯唱商問啓善喚喜喝喪喫営嗣嘆嘉嘱器噴嚇囚四回因団困囲図固国圏園土圧在地坂均坊坑坪垂型垣埋城域執培基埼堀堂堅堕堤堪報場塀塁塊塑塔塗塚塩填塾境墓増墜墨墳墾壁壇壊壌士壬壮声-売変夏夕外多夜夢大天-夫央失奇-奉奏契奔奥奨奪奮女奴好如-妄妊妙妥妨妹妻姉始姓委姫姻姿威娘娠娯婆婚婦婿媒嫁嫌嫡嬢子孔字存孝季孤学孫宅宇-安完宗-定宜宝実客-室宮宰害-家容宿寂寄-密富寒寛寝察寡寧審寮寸寺対寿封専射将尉-尋導小少尚就尺尼-局居屈届屋展属層履屯山岐岡岩岬岳岸峠峡峰島崇崎崩川州巡巣工-巨差己巳巻市布帆希帝帥師席帯帰帳常帽幅幕幣干-年幸幹幻-幾庁広床序底店庚府度座庫庭庶-庸廃廉廊延廷建弁弊式弐弓-引弘弟弦弧弱張強弾当形彩彫彰影役彼往征径待律後徐徒従得御復循微徳徴徹心必忌忍志-忙応忠快念怒怖思怠急性怪恋恐恒恥恨恩恭息恵悔悟悠患悦悩悪悲悼情惑惜惨惰想愁愉意愚愛感慈態慌慎慕慢慣慨慮慰慶憂憎憤憩憲憶憾懇懐懲懸戊戌成-戒戦戯戸戻房所扇扉手才打払扱扶批承技抄把抑投抗折抜択披抱抵抹押抽担拍拐拒拓拘拙招拝拠拡括拷拼拾持指挑挙挟振挿捕捜捨据掃授掌排掘掛採探接控推措掲描提揚換握揮援揺損搬搭携搾摂摘摩撃撤撮撲擁操擦擬支改攻放政故敏救敗教敢散敬数整敵敷文斉斎斗料斜斤斥断新方施旅旋族旗既日旧-早旬昆昇昌明易昔星映春昨昭是昼時晩普景晴晶暁暇暑暖暗暦暫暮暴曇曜曲更書曹替最月有服朕朗望朝期木未-札朱朴机朽杉材村束条来杯東松板析林枚果枝枠枢枯架柄某染柔柱柳査栄栓校株核根格栽桃案桑桜桟梅械棄棋棒棚棟森棺植検楔業極楼楽概構様槽標模権横樹橋機欄欠次欧欲欺款歌歓止正武歩歯歳歴死殉-残殖殴段殺殻殿母毎毒比毛氏民気水氷永汁求汎汗汚江池決汽沈沖没沢河沸油治沼沿況泉泊泌法泡-泣泥注泰泳洋洗洞津洪活派流浄浅浜浦浪浮浴海浸消涙涯液涼淑淡深混添清渇-渉渋渓減渡渦温測港湖湯湾-満源準溝溶滅滋滑滝滞滴漁漂漆漏演漠漢漫漬漸潔潜潟潤潮澄激濁濃濫濯瀬火灯灰災炉炊炎炭点為烈無焦然焼煙照煩煮熟熱燃燥爆爵父片版牙牛牧物牲特犠犬犯状狂狩独狭猛猟猪猫献猶猿獄獣獲玄率玉王珍珠班現球理琴環璽瓶甘甚生産用田-申男町画界畑畔留畜畝略番異畳疎疑疫疲疾病症痘痛痢痴療癒癖癸発登白百的皆皇皮皿盆益盗盛盟監盤目盲直相盾省看県真眠眺眼着睡督瞬矛矢知短矯石砂研砕砲破硝硫硬碁碑確磁磨礁礎示礼社祈祉祖祚祝神祥票祭禁禄禅禍-福秀私秋科秒秘租秩称移程税稚種稲稼稿穀穂積穏穫穴究空突窃窒窓窮窯立竜章童端競竹笑笛符第筆等筋筒答策箇算管箱節範築篤簡簿籍米粉粋粒粗粘粛粧精糖糧糸系糾紀約紅紋納純紙-紛素-索紫累細紳紹紺終組経結絞絡給統絵絶絹継続維綱網綿緊総緑緒線締編緩緯練縁縄縛縦縫縮績繁繊織繕繭繰缶罪置罰署罷羅羊美群義羽翁翌習翻翼老考者耐耕耗耳聖聞聴職肉肌肖肝肢肥肩肪肯育肺胃胆背胎胞胴胸能脂脅脈脚脱脳腐腕腰腸腹膚膜膨臓臣臨自臭至致興舌舎舗舞舟航般舶船艇艦良色芋芝花芳芸芽苗若苦英茂茎茶草荒荘荷菊菌菓菜華落葉著葬蒸蓄蔵薄薦薪-薬藤藩藻虎虐虚虜虞虫蚊蚕蛇蛍蛮融血衆行術街衛衝衡衣表衰衷袋被裁裂装裏裕補裸製複褐褒襟襲西要覆覇見規視覚覧親観角解触言訂計討訓託記訟訪設許訳訴診証詐詔評詞詠試詩詰-詳誇誉誌認誓誕誘語誠誤説読誰課調談請論諭諮諸諾謀謁謄謙講謝謡謹識譜警議譲護谷豆豊豚象豪貝貞負-貢貧-販貫責貯貴買貸費貿賀賃賄資賊賓賛賜賞賠賢賦質購贈赤赦走赴起超越趣足距跡路跳践踊踏躍身車軌軍軒軟転軸軽較載輝輩輪輸轄辛辞辰-農辺込迅迎近返迫迭述迷追退送逃逆透逐逓途通逝速造連逮週進逸遂遅遇遊運遍過道-違遠遣適遭遮遵遷選遺避還邦邪邸郊郎郡部郭郵郷都酉酌配酒酔酢酪酬酵酷酸醜醸釈里-量金針釣鈍鈴鉄鉛鉢鉱銀銃銅銘銭鋭鋳鋼錄錠錬錯録鍛鎖鎮鏡鐘鑑長門閉開閏閑間関閣閥閲闘阪防阻附降限陛院-陥陪陰陳陵陶陸険陽隅隆隊階随隔際障隠隣隷隻雄-雇雉雌雑離難雨雪雰雲零雷電需震霊霜霧露青静非面革靴韓音韻響頂頃項順預-頒領頬頭頻頼題額顔顕願類顧風飛食飢飯飲飼-飾養餓館首香馬駄-駆駐騎騒験騰驚骨髄高髪鬼魂魅魔魚鮮鯨鳥鳳鳴鶏鹿麗麦麻黄黒黙鼓鼠鼻齢])+$").unwrap()); +pub static RE_MAL: Lazy = Lazy::new(|| Regex::new("^([ംഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-ൃെ-ൈൊ-്ൗൠൡൺ-ൿ‌‍])+$").unwrap()); +pub static RE_MAI: Lazy = Lazy::new(|| Regex::new("^([ंःअ-ऌएऐओ-घच-नप-रलव-ह़ा-ूेैोौॡ]|अं|अः|क्ष|ज्ञ|डं|त्र|श्र)+$").unwrap()); +pub static RE_NLD: Lazy = Lazy::new(|| Regex::new("^([a-zà-ëí-ïñóôöø-üÿœ]|ij|íj́)+$").unwrap()); +pub static RE_SLV: Lazy = Lazy::new(|| Regex::new("^([a-zà-âä-ïñ-ôöø-üÿāăćčđēĕīĭōŏœšūŭž])+$").unwrap()); +pub static RE_THA: Lazy = Lazy::new(|| Regex::new("^([ก-ฺเ-๎​])+$").unwrap()); +pub static RE_BRE: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ]|ch|cʼh)+$").unwrap()); +pub static RE_EUS: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ])+$").unwrap()); +pub static RE_LUB: Lazy = Lazy::new(|| Regex::new("^([a-zàáèéìíòóùúɔɛ]|ng|ny|ph|shi|ɔ̀|ɔ́|ɛ̀|ɛ́)+$").unwrap()); +pub static RE_VIE: Lazy = Lazy::new(|| Regex::new("^([a-zà-ãè-êìíò-õùúýăđĩũơưạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ])+$").unwrap()); +pub static RE_DZO: Lazy = Lazy::new(|| Regex::new("^([ཀ-གང-ཇཉ-ཌཎ-དན-བམ-ཛཝ-ཨིེུ-ཾ྄ྀྐ-ྒྔྗྙ-ྜྞ-ྡྣ-ྦྨ-ྫྭྱ-ླྵ-ྷྺ-ྼ])+$").unwrap()); +pub static RE_SPA: Lazy = Lazy::new(|| Regex::new("^([a-zªºà-ïñ-ôöø-ýÿāăēĕīĭōŏœūŭ])+$").unwrap()); +pub static RE_SWA: Lazy = Lazy::new(|| Regex::new("^([a-z]|ch)+$").unwrap()); +pub static RE_SME: Lazy = Lazy::new(|| Regex::new("^([a-zàáã-éíñ-óöøúüčđńŋšŧž])+$").unwrap()); +pub static RE_CES: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-ýÿāăčďēĕěīĭľłňōŏœŕřšťūŭůž]|ch)+$").unwrap()); +pub static RE_BRX: Lazy = Lazy::new(|| Regex::new("^([ँंअ-ऊऍए-ऑओ-घच-नप-रलळव-ह़ा-ृॅे-ॉो-्‌‍]|ड़)+$").unwrap()); +pub static RE_HEB: Lazy = Lazy::new(|| Regex::new("^([ְ-ֹֻ-ֽֿׁׂׄא-ת״‎‏])+$").unwrap()); +pub static RE_KAS: Lazy = Lazy::new(|| Regex::new("^([ؠ-ؤابت-غفقل-نوَ-ِٔ-ٟٗٲٹپچڈڑژکگںھہۄۆیۍے‎‏])+$").unwrap()); +pub static RE_QUE: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ]|ch|chʼ|kʼ|ll|pʼ|qʼ|tʼ)+$").unwrap()); +pub static RE_LTZ: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-ôöø-üÿāăēĕğīĭİıōŏœşūŭ])+$").unwrap()); +pub static RE_KAT: Lazy = Lazy::new(|| Regex::new("^([ა-ჺⴀ-ⴥ])+$").unwrap()); +pub static RE_CHU: Lazy = Lazy::new(|| Regex::new("^([а-ьює-їџѡѣѥѧѩѫѭѯѱѳѵѷѻѽѿҁ-҄҇-҉ҥ‌‍ⷠ-ⷿⸯꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩ꙯-꙲ꙴ-ꙻ꙽ꙿꚞꚟ︮︯])+$").unwrap()); +pub static RE_ROH: Lazy = Lazy::new(|| Regex::new("^([áâä-çêëí-ïñóôöøú-üÿāăēĕīĭōŏœūŭ])+$").unwrap()); +pub static RE_BEL: Lazy = Lazy::new(|| Regex::new("^([а-зй-шы-яёіў]|а́|дж|дз|е́|о́|у́|ы́|э́|ю́|я́|ё́|і́)+$").unwrap()); +pub static RE_NMG: Lazy = Lazy::new(|| Regex::new("^([a-záâäéêí-ïóôöúûāēěīńŋōŕūǎǐǒǔǝɓɔɛ]|ǝ́|ǝ̂|ǝ̄|ǝ̌|ɔ́|ɔ̂|ɔ̄|ɔ̌|ɛ́|ɛ̂|ɛ̄|ɛ̌)+$").unwrap()); +pub static RE_SRP: Lazy = Lazy::new(|| Regex::new("^([a-zåćčđšžа-яёђј-ћџ]|dž|lj|nj|а̂|е̂|и̂|о̂|у̂)+$").unwrap()); +pub static RE_POL: Lazy = Lazy::new(|| Regex::new("^([a-zßàâä-ëîïóôöùûüÿąćęłńœśźż])+$").unwrap()); +pub static RE_NDE: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_SOM: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_YAV: Lazy = Lazy::new(|| Regex::new("^([a-zà-âèéì-îò-ôù-ûāīŋōūǎǒǔɔɛ]|mb|ny|ŋg|ɔ̀|ɔ́|ɛ̀|ɛ́)+$").unwrap()); +pub static RE_SAG: Lazy = Lazy::new(|| Regex::new("^([a-zâäêëîïôöùûü])+$").unwrap()); +pub static RE_EWE: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-öø-üÿāăĕĩĭŋŏœũŭƒɔɖɛɣʋẽ]|ɔ̀|ɔ́|ɔ̃|ɛ̀|ɛ́|ɛ̃)+$").unwrap()); +pub static RE_TEL: Lazy = Lazy::new(|| Regex::new("^([ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-హా-ౄె-ైొ-్ౕౖౠౡ౦-౯‌‍])+$").unwrap()); +pub static RE_BOD: Lazy = Lazy::new(|| Regex::new("^([ༀཀ-གང-ཇཉ-ཌཎ-དན-བམ-ཛཝ-ཨཪིུཷཹ-྄ྀྐ-ྒྔ-ྗྙ-ྜྞ-ྡྣ-ྦྨ-ྫྭ-ྸྺ-ྼ]|ཀྵ|གྷ|ཌྷ|དྷ|བྷ|ཛྷ|ཱི|ཱུ|ཱྀ|ྐྵ|ྒྷ|ྜྷ|ྡྷ|ྦྷ|ྫྷ|ྲྀ|ླྀ)+$").unwrap()); +pub static RE_EPO: Lazy = Lazy::new(|| Regex::new("^([a-zĉĝĥĵŝŭ])+$").unwrap()); +pub static RE_LAO: Lazy = Lazy::new(|| Regex::new("^([ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜໝ​])+$").unwrap()); +pub static RE_UKR: Lazy = Lazy::new(|| Regex::new("^([ʼа-яёєіїґ]|а́|е́|и́|о́|у́|ю́|я́|є́|і́|ї́)+$").unwrap()); +pub static RE_SAH: Lazy = Lazy::new(|| Regex::new("^([а-яёҕҥүһө]|дь|нь)+$").unwrap()); +pub static RE_BEZ: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_EST: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-öø-üāēīōŏœšūž])+$").unwrap()); +pub static RE_MKD: Lazy = Lazy::new(|| Regex::new("^([а-ик-шѐѓѕј-њќѝџ])+$").unwrap()); +pub static RE_KHM: Lazy = Lazy::new(|| Regex::new("^([ក-អឥ-ឧឩ-្​]|អា|ឧក)+$").unwrap()); +pub static RE_SND: Lazy = Lazy::new(|| Regex::new("^([ءآئ-بت-غفقل-ويَ-ِٺٻٽ-ڀڃڄچڇڊڌڍڏڙڦکڪگڱڳڻھ‌‍]|جھ|گھ)+$").unwrap()); +pub static RE_CKB: Lazy = Lazy::new(|| Regex::new("^([ء-غف-ْپچڕژڤکگڵھۆیێە‎‏])+$").unwrap()); +pub static RE_INA: Lazy = Lazy::new(|| Regex::new("^([a-z]|ch|ph)+$").unwrap()); +pub static RE_KDE: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_FAO: Lazy = Lazy::new(|| Regex::new("^([a-záæíðóøúý])+$").unwrap()); +pub static RE_KAZ: Lazy = Lazy::new(|| Regex::new("^([а-яёіғқңүұһәө])+$").unwrap()); +pub static RE_KIR: Lazy = Lazy::new(|| Regex::new("^([а-яёңүө])+$").unwrap()); +pub static RE_MAR: Lazy = Lazy::new(|| Regex::new("^([ँ-ःअ-ऍए-ऑओ-नप-ळव-ह़-ॅे-ॉो-्ॐ‌‍])+$").unwrap()); +pub static RE_IBO: Lazy = Lazy::new(|| Regex::new("^([a-zàáèéìíòóùúāēīńōūǹḿṅẹịọụ]|ch|gb|gh|gw|kp|kw|m̀|nw|ny|sh|ị̀|ị́|ọ̀|ọ́|ụ̀|ụ́)+$").unwrap()); +pub static RE_MLT: Lazy = Lazy::new(|| Regex::new("^([a-zàèìòùċġħż]|għ)+$").unwrap()); +pub static RE_NAQ: Lazy = Lazy::new(|| Regex::new("^([a-zâîôûǀ-ǃ])+$").unwrap()); +pub static RE_PCM: Lazy = Lazy::new(|| Regex::new("^([a-zàáèéìíòóùúẹọ]|ch|gb|kp|sh|zh|ẹ̀|ẹ́|ọ̀|ọ́)+$").unwrap()); +pub static RE_VUN: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_WAE: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-öø-üÿāăčēĕīĭōŏœšũūŭ])+$").unwrap()); +pub static RE_XHO: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_YID: Lazy = Lazy::new(|| Regex::new("^([א-ףץ-ת‎‏]|אַ|אָ|בֿ|דזש|וּ|וו|וי|זש|טש|יִ|יי|כּ|פּ|פֿ|שׂ|תּ|ײַ)+$").unwrap()); +pub static RE_ZGH: Lazy = Lazy::new(|| Regex::new("^([ⴰⴱⴳⴷⴹⴻ-ⴽⵀⵃ-ⵅⵇⵉⵊⵍ-ⵏⵓ-ⵖⵙ-ⵜⵟⵡ-ⵣⵥ]|ⴳⵯ|ⴽⵯ)+$").unwrap()); +pub static RE_HAU: Lazy = Lazy::new(|| Regex::new("^([a-zà-âè-êì-îò-ôù-ûƙƴɓɗʼ]|r̃|sh|ts|ʼy)+$").unwrap()); +pub static RE_GSW: Lazy = Lazy::new(|| Regex::new("^([a-zà-âä-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ])+$").unwrap()); +pub static RE_NEP: Lazy = Lazy::new(|| Regex::new("^([ँ-ःअ-ऍए-ऑओ-नप-रलळव-ह़-ॅे-ॉो-्ॐ‌‍])+$").unwrap()); +pub static RE_KAM: Lazy = Lazy::new(|| Regex::new("^([a-wyzĩũ])+$").unwrap()); +pub static RE_FRY: Lazy = Lazy::new(|| Regex::new("^([a-pr-wyzà-âäæè-ëíïò-ôöù-ý]|ij|íj́)+$").unwrap()); +pub static RE_FRA: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-öø-üÿāćēīijœřšſǔ])+$").unwrap()); +pub static RE_KAL: Lazy = Lazy::new(|| Regex::new("^([a-zá-ãåæéêíîôõøúûĩĸũẽ])+$").unwrap()); +pub static RE_KLN: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_LAV: Lazy = Lazy::new(|| Regex::new("^([a-zāčēģīķļņōŗšūž])+$").unwrap()); +pub static RE_MGO: Lazy = Lazy::new(|| Regex::new("^([a-zàèìòùŋɔəʼ]|ch|gh|ɔ̀|ə̀)+$").unwrap()); +pub static RE_TGK: Lazy = Lazy::new(|| Regex::new("^([а-яёғқҳҷӣӯ])+$").unwrap()); +pub static RE_TWQ: Lazy = Lazy::new(|| Regex::new("^([a-zãõŋšžɲẽ])+$").unwrap()); +pub static RE_CYM: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-ýÿāăēĕīĭōŏœūŭŵŷẁẃẅỳ]|ch|dd|ff|ll|ng|ph|rh|th)+$").unwrap()); +pub static RE_MNI: Lazy = Lazy::new(|| Regex::new("^([‌‍])+$").unwrap()); +pub static RE_NDS: Lazy = Lazy::new(|| Regex::new("^([a-zà-âä-ïñ-ôöø-üÿāăēĕęīĭōŏœūŭ])+$").unwrap()); +pub static RE_EBU: Lazy = Lazy::new(|| Regex::new("^([a-zĩũ])+$").unwrap()); +pub static RE_NYN: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_RON: Lazy = Lazy::new(|| Regex::new("^([a-zà-âäåç-ëîñöüăşţșț])+$").unwrap()); +pub static RE_BAM: Lazy = Lazy::new(|| Regex::new("^([a-zŋɔɛɲ])+$").unwrap()); +pub static RE_ISL: Lazy = Lazy::new(|| Regex::new("^([a-záæéíðóöúýþ])+$").unwrap()); +pub static RE_KUR: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-ôø-ûÿāăēĕīĭōŏœşūŭ])+$").unwrap()); +pub static RE_GLA: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-üÿāăċēĕġīĭıłōŏœşūŭșḋḟṁṗṡṫ])+$").unwrap()); +pub static RE_ARA: Lazy = Lazy::new(|| Regex::new("^([ء-غـ-ْٯٰپچژڜڢڤڥڧ-کڭگیݣ‌-‏])+$").unwrap()); +pub static RE_HYE: Lazy = Lazy::new(|| Regex::new("^([ա-և])+$").unwrap()); +pub static RE_GLV: Lazy = Lazy::new(|| Regex::new("^([a-zç])+$").unwrap()); +pub static RE_KOK: Lazy = Lazy::new(|| Regex::new("^([ँ-ःअ-ऍए-ऑओ-नप-रलळव-ह़-ॅे-ॉो-्ॐ०-९‌‍]|क़|ख़|ग़|ज़|ड़|ढ़|फ़|य़)+$").unwrap()); +pub static RE_POR: Lazy = Lazy::new(|| Regex::new("^([a-zªºà-ïñ-öø-üÿāăēĕīĭōŏœūŭ])+$").unwrap()); +pub static RE_RUN: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_KAN: Lazy = Lazy::new(|| Regex::new("^([ಂಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೞೠೡ೦-೯‌‍])+$").unwrap()); +pub static RE_SWE: Lazy = Lazy::new(|| Regex::new("^([a-zà-éëí-ïñóöøúüÿāī])+$").unwrap()); +pub static RE_KHQ: Lazy = Lazy::new(|| Regex::new("^([a-zãõŋšžɲẽ])+$").unwrap()); +pub static RE_TAT: Lazy = Lazy::new(|| Regex::new("^([а-яёғҗқңүһәө])+$").unwrap()); +pub static RE_KIN: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_KIK: Lazy = Lazy::new(|| Regex::new("^([a-zĩũ])+$").unwrap()); +pub static RE_KOR: Lazy = Lazy::new(|| Regex::new("^([ᄀ-하-ᅵᆨ-ᇂ丘串乃久乖九乞乫乾亂亘交京仇今介件价企伋伎伽佳佶侃來侊供係俓俱個倞倦倨假偈健傀傑傾僅僑價儆儉儺光克兢內公共其具兼冀冠凱刊刮券刻剋剛劇劍劒功加劤劫勁勍勘勤勸勻勾匡匣區南卦却卵卷卿厥去及口句叩叫可各吉君告呱呵咎咬哥哭啓喀喇喝喫喬嗜嘉嘔器囊困固圈國圭圻均坎坑坤坰坵垢基埼堀堅堈堪堺塊塏境墾壙壞夔奇奈奎契奸妓妗姑姜姦娘娜嫁嬌孔季孤宏官客宮家寄寇寡寬尻局居屆屈岐岡岬崎崑崗嵌嵐嶇嶠工巧巨己巾干幹幾庚庫康廊廐廓廣建弓强彊徑忌急怪怯恐恝恪恭悸愆感愧愷愾慊慣慤慨慶慷憩憬憾懃懇懦懶懼戈戒戟戡扱技抉拉拏拐拒拘括拮拱拳拷拿捏据捲捺掘掛控揀揆揭擊擎擒據擧攪攷改攻故敎救敢敬敲斛斤旗旣昆昑景晷暇暖暠暻曠曲更曷朗朞期机杆杞杰枏果枯架枸柑柩柬柯校根格桀桂桔桿梏梗械梱棄棋棍棘棨棺楗楠極槁構槐槨槪槻槿樂橄橋橘機檄檎檢櫃欄權欺款歌歐歸殼毆毬氣求江汨汲決汽沂沽洛洸浪涇淃淇減渠渴湳溝溪滑滾漑潔潰澗激濫灌灸炅炚炬烙烱煖爛牽犬狂狗狡狼獗玖玘珂珏珖珙珞珪球琦琨琪琯琴瑾璂璟璣璥瓊瓘瓜甄甘甲男畇界畸畺畿疆疥疳痂痙痼癎癩癸皆皎皐盖監看眷睾瞰瞼瞿矜矩矯硅硬碁碣磎磬磯磵祁祇祈祛祺禁禽科稈稼稽稿穀究穹空窘窟窮窺竅竟竭競竿筋筐筠箇箕箝管簡粳糠系糾紀納紘級紺絅結絞給絳絹絿經綱綺緊繫繭繼缺罐罫羅羈羌羔群羹翹考耆耉耕耭耿肌肝股肩肯肱胛胱脚脛腔腱膈膏膠臘臼舅舊舡艮艱芎芥芩芹苛苟苦苽茄莖菅菊菌菓菫菰落葛葵蓋蕎蕨薑藁藍藿蘭蘿虔蚣蛟蝎螺蠟蠱街衢衲衾衿袈袞袴裙裸褐襁襟襤見規覡覲覺觀角計記訣訶詭誇誡誥課諫諾謙講謳謹譏警譴谷谿豈貢貫貴賈購赳起跏距跨踞蹇蹶躬軀車軌軍軻較輕轎轟辜近迦迲适逑逕逵過遣遽邏那邯邱郊郎郡郭酪醵金鈐鈞鉀鉅鉗鉤銶鋸鋼錡錤錦錮鍋鍵鎌鎧鏡鑑鑒鑛開間閘閣閨闕關降階隔隙雇難鞏鞠鞨鞫頃頸顆顧飢餃館饉饋饑駒駕駱騎騏騫驅驕驚驥骨高鬼魁鮫鯤鯨鱇鳩鵑鵠鷄鷗鸞麒麴黔鼓龕龜가-힣])+$").unwrap()); +pub static RE_ITA: Lazy = Lazy::new(|| Regex::new("^([a-zªºß-ïñ-öø-üÿœ])+$").unwrap()); +pub static RE_DEU: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-ôöø-üÿāăēĕğīĭİıōŏœşūŭ])+$").unwrap()); +pub static RE_LKT: Lazy = Lazy::new(|| Regex::new("^([a-záéíóúčŋšžǧȟʼ]|aŋ|iŋ|kh|kȟ|kʼ|ph|pȟ|pʼ|sʼ|th|tȟ|tʼ|uŋ|čh|čʼ|šʼ|ȟʼ)+$").unwrap()); +pub static RE_OSS: Lazy = Lazy::new(|| Regex::new("^([а-яёӕ]|гъ|дж|дз|къ|пъ|тъ|хъ|цъ|чъ)+$").unwrap()); +pub static RE_GLE: Lazy = Lazy::new(|| Regex::new("^([a-záåéíóúċġḃḋḟṁṗṡṫ])+$").unwrap()); +pub static RE_GUZ: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_BEN: Lazy = Lazy::new(|| Regex::new("^([ঁ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗৠ-ৣৰ-৺‌‍]|ক্ষ|ড়|ঢ়|য়)+$").unwrap()); +pub static RE_AKA: Lazy = Lazy::new(|| Regex::new("^([a-wyzɔɛ])+$").unwrap()); +pub static RE_HAW: Lazy = Lazy::new(|| Regex::new("^([a-zāēīōūʻ])+$").unwrap()); +pub static RE_JMC: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_MUA: Lazy = Lazy::new(|| Regex::new("^([a-zãëõĩŋǝɓɗṽ])+$").unwrap()); +pub static RE_ORI: Lazy = Lazy::new(|| Regex::new("^([ଁ-ଃଅ-ଋଏଐଓ-ନପ-ରଲଳଵ-ହ଼ା-ୃେୈୋ-୍ୟୱ‌‍]|ଡ଼|ଢ଼)+$").unwrap()); +pub static RE_ENG: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏœšūŭḓḽṅṋṱ])+$").unwrap()); +pub static RE_LAG: Lazy = Lazy::new(|| Regex::new("^([a-záéíóúɨʉ])+$").unwrap()); +pub static RE_PAN: Lazy = Lazy::new(|| Regex::new("^([ء-ؤئ-غفقل-وُٹ-پچڈڑژکگںھہیےਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਵਸਹ਼ਾ-ੂੇੈੋ-੍ੜ੦-ੴ‌-‏]|ਖ਼|ਗ਼|ਜ਼|ਫ਼|ਲ਼|ਸ਼)+$").unwrap()); +pub static RE_NUS: Lazy = Lazy::new(|| Regex::new("^([a-zäëïöŋɔɛɣ]|a̱|e̱|i̱|o̱|ɔ̈|ɔ̱|ɛ̈|ɛ̱|ɛ̱̈)+$").unwrap()); +pub static RE_FIN: Lazy = Lazy::new(|| Regex::new("^([a-zß-ëí-öø-ÿāăąćċčďđēėęěğģħīį-ıķĺļľłńņňŋőœŕřśŝşšţťŧūůűųźżžǥǧǩǯșțȟʒ])+$").unwrap()); +pub static RE_TAM: Lazy = Lazy::new(|| Regex::new("^([ஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-வஷ-ஹா-ூெ-ைொ-்‌‍])+$").unwrap()); +pub static RE_KSF: Lazy = Lazy::new(|| Regex::new("^([a-záéíóúŋǝɔɛ]|ǝ́|ɔ́|ɛ́)+$").unwrap()); +pub static RE_XOG: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_SUN: Lazy = Lazy::new(|| Regex::new("^([à-èê-ïñ-ôöø-üÿāăēĕīĭōŏœūŭ])+$").unwrap()); +pub static RE_GUJ: Lazy = Lazy::new(|| Regex::new("^([ઁ-ઃઅ-ઋઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ૰‌‍])+$").unwrap()); +pub static RE_TEO: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_III: Lazy = Lazy::new(|| Regex::new("^([ꀀ-ꒌ])+$").unwrap()); +pub static RE_AZE: Lazy = Lazy::new(|| Regex::new("^([a-zçöüğİışəа-яјғҝүҹһәө])+$").unwrap()); +pub static RE_BEM: Lazy = Lazy::new(|| Regex::new("^([a-z]|sh)+$").unwrap()); +pub static RE_BOS: Lazy = Lazy::new(|| Regex::new("^([a-zćčđšžа-ик-шђј-ћџ]|dž|lj|nj)+$").unwrap()); +pub static RE_CCP: Lazy = Lazy::new(|| Regex::new("^([0U𑄃-𑄦𑄬])+$").unwrap()); +pub static RE_LUY: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_DYO: Lazy = Lazy::new(|| Regex::new("^([a-záéíñóúŋ])+$").unwrap()); +pub static RE_MYA: Lazy = Lazy::new(|| Regex::new("^([က-ဴံ-၉၏-ၚၢၤၥၵၽၾႆႈႊႏ])+$").unwrap()); +pub static RE_LIT: Lazy = Lazy::new(|| Regex::new("^([a-zàáãèéìíñ-óõùúąčėęĩįšũūųžẽ]|ch|dz|dž|i̇̀|i̇́|i̇̃|j̃|j̇̃|l̃|m̃|r̃|ą́|ą̃|ė́|ė̃|ę́|ę̃|į́|į̃|į̇́|į̇̃|ū́|ū̃|ų́|ų̃)+$").unwrap()); +pub static RE_MAS: Lazy = Lazy::new(|| Regex::new("^([a-zà-âè-êì-îò-ôù-ûāēīŋōūɔɛɨʉ]|ny|rr|sh|wu|yi|ʉ́)+$").unwrap()); +pub static RE_EWO: Lazy = Lazy::new(|| Regex::new("^([a-zà-âè-êì-îò-ôù-ûěńŋǎǐǒǔǹɔəɛ]|dz|kp|ng|nk|ts|ɔ̀|ɔ́|ɔ̂|ɔ̌|ə̀|ə́|ə̂|ə̌|ɛ̀|ɛ́|ɛ̂|ɛ̌)+$").unwrap()); +pub static RE_MFE: Lazy = Lazy::new(|| Regex::new("^([a-pr-z])+$").unwrap()); +pub static RE_DUA: Lazy = Lazy::new(|| Regex::new("^([a-záéíóúŋūɓɔɗɛ]|ny|ɔ́|ɛ́)+$").unwrap()); +pub static RE_MZN: Lazy = Lazy::new(|| Regex::new("^([ء-غف-ْٰٖٔپچژکگی‌-‏])+$").unwrap()); +pub static RE_MGH: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_AMH: Lazy = Lazy::new(|| Regex::new("^([ሀ-ሆለ-ቆቈቊ-ቍበ-ኆኈኊ-ኍነ-ኮኰኲ-ኵኸ-ኾወ-ዎዐ-ዖዘ-ዮደ-ዷጀ-ጎጐጒ-ጕጠ-ፆፈ-ፗ])+$").unwrap()); +pub static RE_JAV: Lazy = Lazy::new(|| Regex::new("^([a-zâåè-êìòù])+$").unwrap()); +pub static RE_PRG: Lazy = Lazy::new(|| Regex::new("^([a-zāēģīķņōŗšūžțḑ])+$").unwrap()); +pub static RE_SES: Lazy = Lazy::new(|| Regex::new("^([a-zãõŋšžɲẽ])+$").unwrap()); +pub static RE_TIR: Lazy = Lazy::new(|| Regex::new("^([ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፟ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ])+$").unwrap()); +pub static RE_MLG: Lazy = Lazy::new(|| Regex::new("^([a-zàâè-ìîïñô])+$").unwrap()); +pub static RE_DAV: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_IND: Lazy = Lazy::new(|| Regex::new("^([a-zå])+$").unwrap()); +pub static RE_HUN: Lazy = Lazy::new(|| Regex::new("^([a-zà-ïñ-ôöø-üÿāăēĕīĭōŏőœūŭű]|ccs|cs|ddz|ddzs|dz|dzs|ggy|gy|lly|ly|nny|ny|ssz|sz|tty|ty|zs|zzs)+$").unwrap()); +pub static RE_KSB: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_HSB: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-ôöø-ýÿāăąćčďđēĕėęěğīĭİıĺľłńňōŏőœŕřśşšťūŭůűźżž]|ch|dź)+$").unwrap()); +pub static RE_AGQ: Lazy = Lazy::new(|| Regex::new("^([a-ik-zàâèêìîòôùûāēěīŋōūǎǐǒǔɔɛɨʉʔ]|ɔ̀|ɔ̂|ɔ̄|ɔ̌|ɛ̀|ɛ̂|ɛ̄|ɛ̌|ɨ̀|ɨ̂|ɨ̄|ɨ̌|ʉ̀|ʉ̂|ʉ̄|ʉ̌)+$").unwrap()); +pub static RE_KAB: Lazy = Lazy::new(|| Regex::new("^([a-zčǧɛɣḍḥṛṣṭẓ])+$").unwrap()); +pub static RE_LIN: Lazy = Lazy::new(|| Regex::new("^([a-záâéêíîóôúěǎǐǒɔɛ]|gb|mb|mp|nd|ng|nk|ns|nt|ny|nz|ɔ́|ɔ̂|ɔ̌|ɛ́|ɛ̂|ɛ̌)+$").unwrap()); +pub static RE_TUK: Lazy = Lazy::new(|| Regex::new("^([a-zäçöüýňşž])+$").unwrap()); +pub static RE_ASA: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_ASM: Lazy = Lazy::new(|| Regex::new("^([ঁ-ঃঅ-ঋএঐও-নপ-রলশ-হ়া-ৃেৈো-ৎৰ-৲‌‍]|ক্ষ|ড়|ঢ়|য়)+$").unwrap()); +pub static RE_CEB: Lazy = Lazy::new(|| Regex::new("^([a-zñ])+$").unwrap()); +pub static RE_DSB: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-ôöø-ýÿāăąćčďđēĕėęěğīĭİıĺľłńňōŏőœŕřśşšťūŭůűźżž]|ch)+$").unwrap()); +pub static RE_MON: Lazy = Lazy::new(|| Regex::new("^([а-яёҗүһӊәө])+$").unwrap()); +pub static RE_ROF: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_UZB: Lazy = Lazy::new(|| Regex::new("^([a-zʼа-яёўғқҳء-ؤئ-غفقل-وي-ْٰٔټپځڅچډړږژښکګگڼۇۉیۍې‌-‏]|ch|gʻ|oʻ|sh)+$").unwrap()); +pub static RE_RWK: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_CHR: Lazy = Lazy::new(|| Regex::new("^([ᏸ-ᏼꭰ-ꮿ])+$").unwrap()); +pub static RE_LRC: Lazy = Lazy::new(|| Regex::new("^([آ-غؽف-ْٔٙٛپچژڤکگھۉۊیە​-‏])+$").unwrap()); +pub static RE_CAT: Lazy = Lazy::new(|| Regex::new("^([a-z·ºà-ïñ-ôöø-üÿāăēĕīĭŀōŏœūŭ])+$").unwrap()); +pub static RE_SEH: Lazy = Lazy::new(|| Regex::new("^([a-zà-ãçéêíò-õú])+$").unwrap()); +pub static RE_VOL: Lazy = Lazy::new(|| Regex::new("^([a-zäöü])+$").unwrap()); +pub static RE_TUR: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-ôöø-üÿāăēĕğīĭİıōŏœşūŭ])+$").unwrap()); +pub static RE_FUL: Lazy = Lazy::new(|| Regex::new("^([0Ua-zñŋƴɓɗ𞤢-𞥃𞥋])+$").unwrap()); +pub static RE_YUE: Lazy = Lazy::new(|| Regex::new("^([一丁七万-与丑专且世丘-业东丝丟丢两-並个中丰串临丸-主丽举乃久么义之-乐乔乖乘乙九也-乡书买乱乾亂了予争事二于亏云互五井亚些亞亡交-亨享京亮亲人亿-仂仅仇今介仍从仑仔他付仙代-以仪们仰仲件价任份企伊伍伏-休众-会伟传伤伦伯估伴伸似伽但佈佉位-佐体-何余佛作你佩佳使來例供依侠侣侦-侨侯侵侶便係-俄俊俗保俠信修俱俾個倍們倒候倚借倫值倾假偉偏做停健側-偷傑備傢傣傲傳傷傻傾僅像僑僧僳價儀億儒儘優儿允元-光克-免兑兒兔党入內-兩八-兮兰共关-兹养-兽内冈冊册再冒写军农冠冬冰冲决况冷净准凉凌减凝几凡凤凭凯-凱凶凸出击函刀分切刊划列-创初删判別利-别到制-券刺刻則剌前剑剛剧剩剪副割創劃劇劉劍力劝-务动-劫励-劳势勁勇勉勋勒動務勝勞勢勤勳勵勸勿包匈化北匹-医區十千升午半华协卑-南博卜卞占-卢卧卫卯-危即却卷卻厂厄-历厉压厌厘厚原厭厲去县参參又及-反发叔取-叙口-另只-叭可台史右叶-叹吃各合-吊同-后吐-吓吕吗君吝-吠否吧含听启吳-吵吸吹吾呀呂呆告员呜呢周味呵呼命咀和咖咤咦咧咪咬咱哀品哇-哉响哎員哥哦哩哪哭哲唉唐唔唬售唯唱唷唸商啊問啟啡啥啦啪啰喀喂善喇喊喔喜喝喬單喵喷嗎嗚嗨嗯嘅嘆嘉嘗嘛嘴嘻嘿器噴嚇嚴囉四回因团园困围固国图圆圈國圍園圓圖團圜土圣在圭地场圾址均坎-坐块坚-坜坡坤坦坪垂垃型垒埃城埔域執培基堂堅堆堕堡堤堪報場塊塔塗塞填塵境墎墙增墨墮壁壇壓壘壞壢壤士壬壮-声壳壽处备复夏夕外多夜够夠夢夥大天-夫央失头夷-夺夾奇-奉奋奎奏契奔奖套奥奧奪奮女奴奶她好如妆-妈妙妝妥妨妮妳妹妻姆姊始姐姑姓委姿威娃娄娘娛娱婁婆婚婦媒媽嫌嫩子孔字-孙孜孝孟季孤学孩孫學宁它宅宇-安宋完宏宗-实宠-室宪宫宮害家容宽-宿寂寄-密富寒寝-察寢實-審寫寬寮寵寶对寻导寿封射将-專尊尋對-小少尔尖尘尚尝尤就尺尼-尾局-层居屆届屋屏展属屠層屬山屿岁岂岚岛岡岩岭岸峇峡峰島峽崇崙崴嵐嶺嶼川州巡工-巨巫差己-巴巷巽币-布帅师希帐帕帖帛帝帥带師席帮帳帶常帽幅幕幣幫干-年并幸幹幻-广庄庆庇床序库-底店庚府废度座庫庭康庸廉廖廠廢廣廳延廷建开异-弄式引弗弘弟张弥弦弯弱張強弹强彈彊彌彎归当录彝彞形彥彦彩彬彭彰影役彻彼往征径待很律後徐-徒得從復微徵德徹心必忆忌忍志-忙忠忧快念忽怀态怎怒怕怖怜思怡急性怨怪总恆恋恐恒恢恥恨恩恭息恰恶恼悅悉悔悟悠悦您悲悶情惊惑惜惠惡惧惨惯惱想惹愁愈愉意愚愛感愿慈態慕慘慢慣慧慮慰慶慾憂憐憑憲憶憾懂應懒懶懷懼戀戈戊戌戏-戒或战截戰戲戴戶户房-扁扇手才扎打托扣扥执扩扫-扭扯扰批找-技抄把抓投抗折抛抢护报披抬抱抵抹抽担拆拉拋拍拏拒拔拖招拜拟拥拨择括拳拼拾拿持挂指按挑挖挝挡挤挥挪振挺捐捕损捡换捨据捲捷掃授掉掌排掛採探接控推措掸描提插揚換握揮援損搖搜搞搬搭搶摄摆摇摘摩摸撐-撒撞撣撥播撾撿擁擇擊擋操擎擔據擠擦擬擴擺擾攝支收改攻放政故效敌敍敏救敗-教敝敢散敦敬数整敵數文斋斐斗料斜断斯新斷方於施旁旅旋族旗无既日-旧早旭时旺昂昆昇昌明昏易昙星映春昨昭是昼显時晉晋晒晓晚晨普景晴晶智暂暑暖暗暫暴曆曉曰曲更書曼曾-最會月有朋服朗望朝期木未-札术朱朵机杀杂权杉李材村杜束条来杨杯-東松板极构析林果枝枢枪枫架柏某染柔查柬柯柳柴标栏树栗校样-根格桃案桌桑档桥梁梅條梦梨梯械梵检棄棉棋棒棚森椅植椰楊楓楔楚業極楼概榜榮構槍樂樓標樞模樣横樹橋機橫檀檔檢欄權次-欣欧欲欺欽款歉歌歐歡-武歲歷歸死殊残殘段殺殼毀毁毅母每毒比毕毛毫氏民气氣水永求汉汗汝江-污汤汪汶決汽沃沈沉沒沖沙沟没沧河油治沿況泄泉泊法泡波泥注泪泰泳泽泾洁洋洗洛洞洩洪洲活洽派流浅测济浏浑浓浦浩浪浮海涂涅涇-涉涛涨涯液涵涼淑淚淡淨深混淺清渐減渡温測港游渾湖湘湯湾源準溝溪溫滄滅滋滑滚满滥滨滴滾滿漂漏演漠漢漫漲漸潔潘潛潜潮澎澤澳激濃濟濤濫濱瀏灌灘灣火灭灯灰灵災-灿炉炎炮炸-為烂烈烏烟烤烦烧热無焦然煙煞照煩熊熟熱燃燈燒營燦爆爐爛爪爬爭爱爵-爸爺爽爾牆-版牌牙牛牠牧物牲牵特牺牽犧犯状犹狀狂狄狐狗狠独狮狱狼猛猜猪猫献猴猶獄獅獎獨獲獸獻玄率玉王玛玩玫环现玲玻珊珍珠珥班現球理琉琪琳琴瑙瑚瑜瑞瑟瑤瑪瑰瑶環瓜瓦瓶甘甚甜生產用甫田-申电男甸画界留畢略番畫異當疆疏疑疗疯疼病痕痛痴瘋療癡癸登-百的皆皇皮盃益监盖-盘盛盜盟盡監盤盧目盲直相盼盾省眉看真眠眼眾着睛睡督瞧瞭矛矣知短石矶码砂砍研砲破础硕硬确碍碎碑碗碟碧碩碰確碼磁磨磯礁礎礙示礼社祕祖祚祛祝神祥票祯祸祿禁禄禅禍-福禪禮离秀私秋种科秒秘租秤秦积称移稅程稍税稣種稱稳稿穆穌積穩究穷穹空穿突窗窝窩窭窮窶立站竞-章童端競竹笑笔笛符笨第筆等筋筑答策筹签简算管箫箭箱節範篇築篮簡簫簽簿籃籌籍籤米类粉粗粤粵精糊糕糟系糾紀約紅納紐純紙-紛素索紧紫累細紹終組結絕絡給統絲經綜綠維綱網緊緒線緣編緩緬緯練縛縣縮縱總績繁繆織繞繪繳繼續纜纠红约级纪纬纯纲纳纵纷纸纽线练组细-终绍经结绕绘给络绝统继绩绪续绰维综绿缅缓编缘缚缩缪缴缸缺网罕罗罚罢罪置罰署罵罷羅羊美羞群義羽翁習翔翘翰翹翻翼耀老考者而耍耐耗耳耶耻聊职联聖聚聞聪聯聰聲職聽肉肚股肥肩肯育胆背胎胖胜胞胡胸能脆脑脚脫脱脸腊腓腔腦腰腳腿膽臉臘臣臥臨自臭至致臺與-舊舌舍舒舞舟航般舰船艇艦良色艺艾节芒芝芦芬花芳苍苏苗若苦英范茅茨茫茲茵茶草荐荒荣药荷荼莉莊莎莫莱莲获菜菩華菲萄萊萤营萧萨萬落葉著葛葡蒂蒋蒙蒲蒼蓋蓝蓬蓮蔕蔡蔣蕭薄薦薩薪藉藍藏藝藤藥蘆蘇蘭虎虑處虚虛號虧虫虽蚩蛇蛋蛙蛮蛰蜀蜂蜜蝎蝶融螢蟲蟹蠍蠻血行術街衛衝衡衣补表袋被裁裂装裕裘補裝裡裤製複褲西要覆見規視親覺覽觀-观规视览觉角解触觸言訂計訊討訓託記訥訪設許訴註証評詞詢試詩話-詳誇誉誌認誓誕語誠誤說誰課誼調談請諒論諸諺諾謀謂講謝謬證識譜警譯議護譽讀變讓讚计订认讨让训-记讲讷许论设访证评识诉词译试诗诚话诞询该详语误说请诸诺读课谁调谅谈谊谋谓谚谢谬谱谷豆豈豐象豪豬貌貓貝貞負-貢貨貪-責貴買費貼賀資賈賓賜賞賢-賤賦質賭賴賺購賽贈贊贏贝-负贡-败货质贪购贯贱贴贵费贺贾资赋赌赏赐赖赚赛赞赠赢-赤赫走赵-起超越趋趕趙趣趨足跃跌跎跑距跟跡路跳踏踢踪蹟蹤躍身躲車軌軍軒軟較載輔輕輛輝輩輪輯輸轉轟车轨轩转轮-轰轻载较辅辆辈辉辑输辛辞辦辨辩辭辯-農边达迁迅过迈迎运近返还这进-迟迦迪迫述迴迷迹追退-逃逆选逊透逐途這-逛逝速造逢連週進逸逻逼遇遊運遍過道-違遗遙遜遠遥適遭遮遲遷選遺避-邁還邊邏那邦邪邮邱邻郁郎郑部郭郵都鄂鄉鄭鄰酉酋配酒酷酸醉醒醜醫采释-量金針釣鈴鉢鉴銀銅銖銘銳銷鋒鋼錄錢錦錫錯鍋鍵鍾鎊鎖鎮鏡鐘鐵鑑针钓钟钢钦钱钵铁铃铜铢铭银销锁锅锋锐错锡锦键镇镑镜長长門閃閉開閏閒間閣閱闆闊闍闐關闡门闪闭问闰闲间闷闹闻闽阁阅阇阐阔阗队防-阶阻阿陀附-陈降限院-除险陪陰陳陵-陸陽隆隊階-隐隔際障隨險隱隴隻难雀雄-集雉雖雙雜雞離難雨雪雲雳零雷電雾需震霍霜霧露霸霹靂靈青靖静靜非靠面革靼鞋鞑韃韋韓韦韩音韵韻響頁頂項順須預頑頓頗領頞頭頻顆題額顏願類顧顯页顶项-须顽-顿预领颇频颗题颜额風飄风飘飛飞食飯飲飽飾餅養餐餘館饭饮饰饱饼馆首香馬駐駕駛騎騙騷驅驗驚马驱驶驻驾骂验骑骗骚骨體高髪髮鬆鬥鬧鬱鬼魁魂魅魔魚魯鮮鱼鲁鲜鳥鳳鳴鴻鵝鷹鸟鸡鸣鸿鹅鹰鹿麗麥麦麵麻麼黃黄黎黑默點黨鼓鼠鼻齊齋齐齒齡齿龄龍龙龜龟])+$").unwrap()); +pub static RE_FUR: Lazy = Lazy::new(|| Regex::new("^([a-zàâåç-ìîïñ-ôùûüčğš])+$").unwrap()); +pub static RE_TZM: Lazy = Lazy::new(|| Regex::new("^([a-zɛɣḍḥṛṣṭ]|gʷ|kʷ)+$").unwrap()); +pub static RE_KKJ: Lazy = Lazy::new(|| Regex::new("^([a-zà-âè-êì-îò-ôù-ûŋnjɓɔɗɛ]|a̧|gb|gw|i̧|kp|kw|mb|nd|ny|u̧|ŋg|ŋgb|ŋgw|ɔ̀|ɔ́|ɔ̂|ɔ̧|ɗy|ɛ̀|ɛ́|ɛ̂|ɛ̧)+$").unwrap()); +pub static RE_MSA: Lazy = Lazy::new(|| Regex::new("^([a-z]|ai|au|dz|kh|ng|ngg|ny|sy|ts|ua)+$").unwrap()); +pub static RE_BUL: Lazy = Lazy::new(|| Regex::new("^([а-ёѝѣѫ]|а̀|о̀|у̀|ъ̀|ю̀|я̀)+$").unwrap()); +pub static RE_RUS: Lazy = Lazy::new(|| Regex::new("^([а-яё]|а́|е́|и́|о́|у́|ы́|э́|ю́|я́)+$").unwrap()); +pub static RE_VAI: Lazy = Lazy::new(|| Regex::new("^([a-záãéíóõúĩŋũɓɔɗɛẽꔀ-ꘌꘐ-ꘟꘪꘫ]|ɔ́|ɔ̃|ɛ́|ɛ̃)+$").unwrap()); +pub static RE_HRV: Lazy = Lazy::new(|| Regex::new("^([a-zćčđšž]|dž|lj|nj)+$").unwrap()); +pub static RE_YOR: Lazy = Lazy::new(|| Regex::new("^([a-zàáèéìíòóùúɔɛṣẹọ]|gb|sh|ɔ̀|ɔ́|ɛ̀|ɛ́|ẹ̀|ẹ́|ọ̀|ọ́)+$").unwrap()); +pub static RE_KSH: Lazy = Lazy::new(|| Regex::new("^([a-zß-ïñ-ôöø-üÿāăēĕėğīĭıijłōŏœūŭů])+$").unwrap()); +pub static RE_SIN: Lazy = Lazy::new(|| Regex::new("^([ංඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟෲෳ​-‍])+$").unwrap()); +pub static RE_URD: Lazy = Lazy::new(|| Regex::new("^([؀ء-ؤئ-غفقل-وي-ْٖٔ-ٰ٘ٹ-پچڈڑژکگںھہ-ۃیے])+$").unwrap()); +pub static RE_FIL: Lazy = Lazy::new(|| Regex::new("^([a-zà-âè-êì-îñ-ôù-û]|ng)+$").unwrap()); +pub static RE_CGG: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); +pub static RE_ELL: Lazy = Lazy::new(|| Regex::new("^([ΐά-ώἀ-ἇἐ-ἕἠ-ἧἰ-ἷὂ-ὄὐ-ὗὢ-ὧὰὲὴὶὸὺὼᾶῆῒῖῗῢῦῧῶ])+$").unwrap()); +pub static RE_DAN: Lazy = Lazy::new(|| Regex::new("^([a-zà-âä-ëí-ïñóôöø-üÿœǿ])+$").unwrap()); +pub static RE_ZHO: Lazy = Lazy::new(|| Regex::new("^([一丁七万-与丑专且世丘-业东丝丟丢两-丧个中丰串临丸-主丽举乃久么义之-乐乒-乔乖乘乙九也-乡书买乱乳乾亂了予争事二于亏云互五井亚些亞亡交-亨享京亮亲人亿-仂仅仇今介仍从仓仔他付仙代-以仪们仰仲件价任份仿企伊伍伏-休众-会伞-传伤伦伯估伴伸似伽但佈佉位-佑体-何余佛作你佤佩佳使來例供依侠侣侦-侨侬侯侵侶便係-俄俊俗保俠信俩修俱俾個倍們倒候倚借倦倫值倾假偉偌偏做停健側-偷傈傑備傢傣储催傲傳傷傻傾僅像僑僧僳價儀億儒儘優儿允元-光克-免兑兒兔党入內-兩八-兮兰共关-兹养-兽内冈冊册再冒写军农冠冥冬冰冲决况冷准凉凌减凝几凡凤凭凯-凱出击函刀分切刊刑划列-创初判別刨-别到制-券刺刻剂則剌前剑剛剧剩剪副割創劃劇劉劍力劝-务劣动-劫励-劳势勁勇勉勋勒動務勝勞勢勤勳勵勸勾勿包匆匈匕-北匙匣匹-医區十千升午半华协卑-南博卜卞占-卢卫卯-危即却卷卻厂厄-历厉压-厍厘厚原厦厨厭厲去县参參又-反发叔取-叙口-另只-叭可台史右叶-叹吃各合-吊同-后吐-吓吕吗君吝-吠否吧含听启吳吵吸吹吻吾呀呂呆呈告呐员呜呢呣呦周味呵呼命和咖咦-咨咪咬咯咱哀品哇-哉响哎哟員哥哦哩哪哭哲哺唇唉唐唔唤唬售唯唱唷唸商啊問啟啡啤-啦啪啮喀喂善喇喊喏喔喜喝喬單喱喵喷喻嗅嗎嗒嗚嗨嗯嘆嘉嘗嘛嘟嘴嘻嘿噘噢器噴嚇嚴囉四回因团园困围固国图圆圈國圍園圓圖團圜土圣在圭地圳场圾址均坎坐坑块坚-坝坡坤坦坪垂垃型垒埃埋城埔域執培基堂堅堆堕堡堤堪報場塊塑塔塗塞填塵境墎增墟墨墮壁壇壓壘壞壢壤士壬壮-声壽处备复夏夕外多夜够夠夢夥大天-夫央失头夷-夺夾奇-奉奋奎奏契奔奖套奥奧奪奮女奴奶她好如妆-妈妖妙妝妥妨妮妳妹妻姆姊始姐姑姓委姿威娃娄娘娛娜娟娱婁婆婚婦婴媒媚媽嫁嫌嫩嬰子孔孕字-孙孜孝孟季孤学孩孫學宁它宅宇-安宋完宏宗-实审-室宪宮害宴家容宽-宿寂寄-寇富寒寝-察寡寢實-審寫寬寮寵寶寸-导寿封射将-專尊尋對-小少尔尖尘尚尝尤尬就尴尺尼-尾局-层居屆屋屏屑展属屠層屬山屿岁岂岗岘岚岛岡岩岳岸峇峡峰島峽崇崙崩崴嵐嶺嶼川州巡工-巨巫差己-巴巷巽巾币-布帅帆师希帐帕帖帛帝帥带師席帮帳帶常帽幅幕幣幫干-年并幸幹幻-广庆庇床序库-底店庙庚府庞废度座庫庭康庸廁廉廖廚廠廢廣廳延廷建开异-弄弊弋式弓引弗弘弟张弥弦弯弱張強弹强彈彊彌彎归当录彗彝彞形彥彩彬彭彰影彷役彻彼往征径待很律後徐-徒得從復循微徵德徹心必忆忌忍志-忙忠忧快念忽怀态怎怒怕怖思怡急性怨怪总恆恋恐恢恥恨恩恭息恰恶恼悄悅悉悔悟悠患您悲悶情惊惑惜惠惡惧惨惯惱想惹愁愈愉意愚愛感愧慈態慎慕慘慢慣慧慮慰慶慾憂憐憑憲憶憾懂應懒懶-懸懼戀戈戊戌戏-戒或战戟截戰戲戴戶户房-扁扇手才扎扑打扔托扣扥执扩扫-扰扳批找-技抄把抑抓投抗折抛抢护报披抬抱抵抹抽担拆拉拋拍拏拒拔拖拘招拜拟拥拦拨择括拳拷拼拾拿持挂指按挑挖挝挡挤挥挪振挺捂捉捐捕损捡换捨据捲捷掃授掉掌排掛採探接控-措掸描提插揚換握揮援損搖搜搞搬搭搶摄摆摇摊摔摘摩摸撅撐撒撞撣-撥播撾撿擁擇擊擋操擎擔據擠擦擬擴擺擾攝支收改攻放政故效敌敍敏救敗-教敝敢散敦敬数敲整敵數文斋斐斗料斜斥断斯新斷方於施旁旅旋族旗无既日-早旭时旺昂昆昇昌明昏易星映春昨昭是显時晃晉晋晒晓晚晨普景晴晶智暂暈暑暖暗暫暮暴曆曉曰曲更書曹曼曾-最會月有朋服朗望朝期木未-札术朱朵机杀杂权杆杉李材村杖杜束条来杨杯-東松板极构析林果枝枢枪枫架柏某染柔柜查柬柯柱柳柴标栋栏树栗校样-根格栽桃框案桌桑档桥桶桿梁梅條梦梨梯械梵检棄棉棋棍棒棕棚森棺椅植椰楊楓楔楚楠業極楼概榈榜榮構槍槟樂樓標樞模樣樱樹橋橙機橫檀檔檢櫃欄權欠-欣欧欲欺欽款歉歌歐歡-武歪歲歷歸死殊残殘段殺殼毀毅母每毒比毕毛毫氏民气氛氣水永求汇汉汗汝江-污汤汪汶決汽沃沈沉沒沖沙沟没沧河油治沿況泉泊法泛泡-泣泥注泰泳泽洋洒洗洛洞津洩洪洲活洽派流浅浆测济浏浑浓浙浦浩浪浮浴海涅涇-涉涌涛涨涯液涵涼淇淋淑淘淚淡淨深混淺添清渐減渡渣温測港渴游渾湖湯湾源準溜溝溪溫滄滅滋滑滕滚满滥滨滩滴滾滿漂漏演漠漢漫漲漸潔潘潛潜潮澎澤澳激濃濟濤濫濱瀏灌灣火灭灯灰灵災-灿炉炎炮炸-為烂烈烏烛烟烤烦烧热無焦焰然煌煎煙煞照煩煮熊熟熱燃燈燒燕營燦燭爆爐爛爪爬爭爱爵-爸爺爽爾牆-版牌牙牛牠-牢牧物牲牵特牺牽犧犬犯状犹狀狂狄狐狗狠独狮狱狼猛猜猪猫献猴猶獄獅獎獨獲獸獻玄率玉王玛玩玫环现玲玻珀珊珍珠珥班現球理琉琊琪琳琴琼瑙瑚瑜瑞瑟瑤瑪瑰瑶璃環瓜瓢瓦瓶甘甚甜生產用甫田-申电男甸画畅界留畢略番畫異當疆疊疏疑疗疯疲疼疾病痕痛痴瘋療癡癸登-百的皆皇皮皱皺盃盆盈益监盒盔盖盘盛盜盟盡監盤盧目盲直相盼盾省眉看真眠眨眩眯眼眾着睛睡督瞌瞧瞭矛矣知短石矶矿码砂砍研砲破础硕硬确碍碎碑碗碟碧碩碰確碼磁磅磨磯礁礎礙示礼社祈祕祖祚祛祝神祥票祭祯祷祸祿禁禄禅禍-福禪禮离秀私秋种科秒秘租秤秦秩积称移稀稅程稍税稣種稱稳稻稿穆穌積穩究穷穹空穿突窗窝窩窮窶立站竞-章童端競竹竿笑笔笛符笨第笼筆等筋筑筒答策筹签简算管箭箱節範篇築篮篷簍簡簫簽簿籃籌籍籤米类粉粒粗粟粤粮粵粹精糊糕糖糟糰系糾紀約紅紋納紐純紗紙-紛素索紧紫累細紹終組結絕絡給統絲經綜綠維綱網緊緒線緣編緩緬緯練縛縣縮縱總績繁繆織繞繪繳繼續纏纜纠红约级纪纬纯纲纳纵纷纸纽线练组细-终绍经结绕绘给络绝统继绩绪续维绵综绿缅缆缎缓编缘缠缩缴缶缸缺罐网罕罗罚罢罪置罰署罵罷羅羊美羞群義羯羽翁翅習翔翘翠翰翹翻翼耀老考者而耍耐耗耳耶耸聊职联聖聘聚聞聪聯聰聲聳職聽肉肖肚股肤肥肩肯育胁胆背胎胖胜胞胡胶胸能脆脑脚脫脱脸腊腐腓腔腦腰腳腹腾腿膽臂臉臘臣臥臨自臭至致臺與-舊舌舍舒舔舞舟航般舰舵船艇艦艮良色艺艾节芒芝芦芬芭花芳芽苍苏苗苜苞若苦英茂范茅茨茫茲茶草荐荒荣药荷荼莉莊莎莪莫莱莲获菇菜菩華菱菲萄萊萍萤营萧萨萬落葉著葛葡葫葵蒂蒋蒙蒲蒸蒼蓉蓋蓝蓬蓮蓿蔑蔕蔡蔣蔽蕭薄薦薩薪薯藉藍藏藝藤藥蘆蘇蘑蘭虎虑處虛號虧虫虹虽虾蚁蚂蚩蛇蛋蛙蛛蛮蜀蜂蜗蜘蜜蜡蝎蝴蝶蝸螃融螢蟲蟹蠍蠟蠢蠻血行術街衛衝衡衣补表袋被袭裁裂装裕裘裙補裝裡裤裹製複褲西要覆見規視親覺覽觀-观规视览觉角解觸言訂計訊討訓託記訥訪設許訴註証評詞詢試詩話-詳誇誉誌認誓誕語誠誤說誰課誼調談請諒論諸諺諾謀謂講謝謬證識譜警譯議護譽讀變讓讚计订认讨让训-记讲讷许论设访证评识诉词译试诗诚话诞询该详语误说请诸诺读课谁调谅谈谊谋谍谓谜谢谨谬谱谷豆豈豐豚象豪豬貌貓貝貞負-貢貨貪-責貴買費貼賀資賈賓賜賞賢-賤賦質賭賴賺購賽贈贊贏贝-负贡-贪购贯贱贴贵贸-贺贼贾资赋赌赏赐赔赖赚赛赞赠赢赤赫走赵起趁超越趋趕趙趣趨足跃跌跎跑距跟跡跤跨路跳踏踢踩踪蹟蹤躍身躬躲車軌軍軒軟較載輔輕輛輝輩輪輯輸轉轟车轨轩转轮-轰轴轻载较辅辆辈辉辐辑输辛辞辦辨辩辭辯-農边达迁迅过迈迎运近返还这进-迟迦迪迫述迴迷迹追退-逃逆选逊透逐递途這-逛逝速造逢連週進逸逻逼遇遊運遍過道-違遗遙遜遞遠適遭遮遲遵遷選遺避-邁還邊邏邓那邦邪邮邱邻郁郎郑部郭郵都鄂鄉鄙鄭鄰酉酋配酒酢酷酸醉醒醜醫采释-量金釘針釣鈔鈕鈴鉛鉢銀銅銖銘銳銷鋒鋼錄錢錦錫錯鍋鍵鍾鎊鎖鎚鎬鎮鏡鐘鐵鐺鑑鑰鑽针钉钓钟钢钥钦钮钯钱钻铁-铃铅铛铜铢铭银铺链销锁锄锅锋锑错锚锡锤锦键锺镇镑镜镭長长門閃閉開閏閒間閣閱闆闊闍闐關闡门闪闭问闰闲间闷闹-闻阁阅阐阔队阮阱-阶阻阿陀附-陆陈降限院-除险陪陰陳陵-陸陽隆隊階-隐隔際障隧隨險隱隴隻难雄-集雉雕雖雙雜雞離難雨雪雯雲雳零雷電雾需霄震霍霖霧露霸霹霾靂靈青靖静靜非靠面革靴靶靼鞋鞑鞠韃韋韓韦韩音韻響頁頂項順須預頑頓頗領頞頭頻顆題額顏願類顧顯页顶项-须顽-顿预领颇频颗题额颠風飄风飘飙飛飞食飯飲飽飾餅養餐餘館餵饭饮饰饱饼馆馏首香馨馬駐駕駛騎騙騷驅驗驚马驱驶驻驼驾骆验骑骗骚骤骨骰骷髏體高髦髮鬆鬥鬧鬱鬼魁魂魅魔魚魯鮮鯉鱼鲁鲜鲤鲸鳄鳥鳳鳴鳶鴻鵝鷹鸟鸡鸣鸭鸽鸿鹅鹤鹰鹿麗麥麦麵麻麼黃黄黎黑默點黨鼓鼠鼻齊齋齐齒齡齿龄龍龙龜龟])+$").unwrap()); +pub static RE_MER: Lazy = Lazy::new(|| Regex::new("^([a-zĩũ])+$").unwrap()); +pub static RE_SNA: Lazy = Lazy::new(|| Regex::new("^([a-z])+$").unwrap()); + +impl super::LanguageExt for Language { + fn is_match(&self, word: &str) -> Option { + match self { + Language::Orm => Some(RE_ORM.is_match(word)), + Language::Nno => Some(RE_NNO.is_match(word)), + Language::Mri => Some(RE_MRI.is_match(word)), + Language::Ast => Some(RE_AST.is_match(word)), + Language::Jgo => Some(RE_JGO.is_match(word)), + Language::Fas => Some(RE_FAS.is_match(word)), + Language::Saq => Some(RE_SAQ.is_match(word)), + Language::Shi => Some(RE_SHI.is_match(word)), + Language::Slk => Some(RE_SLK.is_match(word)), + Language::Lug => Some(RE_LUG.is_match(word)), + Language::Bas => Some(RE_BAS.is_match(word)), + Language::Sqi => Some(RE_SQI.is_match(word)), + Language::Sbp => Some(RE_SBP.is_match(word)), + Language::Kea => Some(RE_KEA.is_match(word)), + Language::Glg => Some(RE_GLG.is_match(word)), + Language::Che => Some(RE_CHE.is_match(word)), + Language::Nnh => Some(RE_NNH.is_match(word)), + Language::Hin => Some(RE_HIN.is_match(word)), + Language::Cor => Some(RE_COR.is_match(word)), + Language::Ton => Some(RE_TON.is_match(word)), + Language::Uig => Some(RE_UIG.is_match(word)), + Language::Wol => Some(RE_WOL.is_match(word)), + Language::Afr => Some(RE_AFR.is_match(word)), + Language::Zul => Some(RE_ZUL.is_match(word)), + Language::Dje => Some(RE_DJE.is_match(word)), + Language::Nob => Some(RE_NOB.is_match(word)), + Language::Smn => Some(RE_SMN.is_match(word)), + Language::Pus => Some(RE_PUS.is_match(word)), + Language::Luo => Some(RE_LUO.is_match(word)), + Language::Jpn => Some(RE_JPN.is_match(word)), + Language::Mal => Some(RE_MAL.is_match(word)), + Language::Mai => Some(RE_MAI.is_match(word)), + Language::Nld => Some(RE_NLD.is_match(word)), + Language::Slv => Some(RE_SLV.is_match(word)), + Language::Tha => Some(RE_THA.is_match(word)), + Language::Bre => Some(RE_BRE.is_match(word)), + Language::Eus => Some(RE_EUS.is_match(word)), + Language::Lub => Some(RE_LUB.is_match(word)), + Language::Vie => Some(RE_VIE.is_match(word)), + Language::Dzo => Some(RE_DZO.is_match(word)), + Language::Spa => Some(RE_SPA.is_match(word)), + Language::Swa => Some(RE_SWA.is_match(word)), + Language::Sme => Some(RE_SME.is_match(word)), + Language::Ces => Some(RE_CES.is_match(word)), + Language::Brx => Some(RE_BRX.is_match(word)), + Language::Heb => Some(RE_HEB.is_match(word)), + Language::Kas => Some(RE_KAS.is_match(word)), + Language::Que => Some(RE_QUE.is_match(word)), + Language::Ltz => Some(RE_LTZ.is_match(word)), + Language::Kat => Some(RE_KAT.is_match(word)), + Language::Chu => Some(RE_CHU.is_match(word)), + Language::Roh => Some(RE_ROH.is_match(word)), + Language::Bel => Some(RE_BEL.is_match(word)), + Language::Nmg => Some(RE_NMG.is_match(word)), + Language::Srp => Some(RE_SRP.is_match(word)), + Language::Pol => Some(RE_POL.is_match(word)), + Language::Nde => Some(RE_NDE.is_match(word)), + Language::Som => Some(RE_SOM.is_match(word)), + Language::Yav => Some(RE_YAV.is_match(word)), + Language::Sag => Some(RE_SAG.is_match(word)), + Language::Ewe => Some(RE_EWE.is_match(word)), + Language::Tel => Some(RE_TEL.is_match(word)), + Language::Bod => Some(RE_BOD.is_match(word)), + Language::Epo => Some(RE_EPO.is_match(word)), + Language::Lao => Some(RE_LAO.is_match(word)), + Language::Ukr => Some(RE_UKR.is_match(word)), + Language::Sah => Some(RE_SAH.is_match(word)), + Language::Bez => Some(RE_BEZ.is_match(word)), + Language::Est => Some(RE_EST.is_match(word)), + Language::Mkd => Some(RE_MKD.is_match(word)), + Language::Khm => Some(RE_KHM.is_match(word)), + Language::Snd => Some(RE_SND.is_match(word)), + Language::Ckb => Some(RE_CKB.is_match(word)), + Language::Ina => Some(RE_INA.is_match(word)), + Language::Kde => Some(RE_KDE.is_match(word)), + Language::Fao => Some(RE_FAO.is_match(word)), + Language::Kaz => Some(RE_KAZ.is_match(word)), + Language::Kir => Some(RE_KIR.is_match(word)), + Language::Mar => Some(RE_MAR.is_match(word)), + Language::Ibo => Some(RE_IBO.is_match(word)), + Language::Mlt => Some(RE_MLT.is_match(word)), + Language::Naq => Some(RE_NAQ.is_match(word)), + Language::Pcm => Some(RE_PCM.is_match(word)), + Language::Vun => Some(RE_VUN.is_match(word)), + Language::Wae => Some(RE_WAE.is_match(word)), + Language::Xho => Some(RE_XHO.is_match(word)), + Language::Yid => Some(RE_YID.is_match(word)), + Language::Zgh => Some(RE_ZGH.is_match(word)), + Language::Hau => Some(RE_HAU.is_match(word)), + Language::Gsw => Some(RE_GSW.is_match(word)), + Language::Nep => Some(RE_NEP.is_match(word)), + Language::Kam => Some(RE_KAM.is_match(word)), + Language::Fry => Some(RE_FRY.is_match(word)), + Language::Fra => Some(RE_FRA.is_match(word)), + Language::Kal => Some(RE_KAL.is_match(word)), + Language::Kln => Some(RE_KLN.is_match(word)), + Language::Lav => Some(RE_LAV.is_match(word)), + Language::Mgo => Some(RE_MGO.is_match(word)), + Language::Tgk => Some(RE_TGK.is_match(word)), + Language::Twq => Some(RE_TWQ.is_match(word)), + Language::Cym => Some(RE_CYM.is_match(word)), + Language::Mni => Some(RE_MNI.is_match(word)), + Language::Nds => Some(RE_NDS.is_match(word)), + Language::Ebu => Some(RE_EBU.is_match(word)), + Language::Nyn => Some(RE_NYN.is_match(word)), + Language::Ron => Some(RE_RON.is_match(word)), + Language::Bam => Some(RE_BAM.is_match(word)), + Language::Isl => Some(RE_ISL.is_match(word)), + Language::Kur => Some(RE_KUR.is_match(word)), + Language::Gla => Some(RE_GLA.is_match(word)), + Language::Ara => Some(RE_ARA.is_match(word)), + Language::Hye => Some(RE_HYE.is_match(word)), + Language::Glv => Some(RE_GLV.is_match(word)), + Language::Kok => Some(RE_KOK.is_match(word)), + Language::Por => Some(RE_POR.is_match(word)), + Language::Run => Some(RE_RUN.is_match(word)), + Language::Kan => Some(RE_KAN.is_match(word)), + Language::Swe => Some(RE_SWE.is_match(word)), + Language::Khq => Some(RE_KHQ.is_match(word)), + Language::Tat => Some(RE_TAT.is_match(word)), + Language::Kin => Some(RE_KIN.is_match(word)), + Language::Kik => Some(RE_KIK.is_match(word)), + Language::Kor => Some(RE_KOR.is_match(word)), + Language::Ita => Some(RE_ITA.is_match(word)), + Language::Deu => Some(RE_DEU.is_match(word)), + Language::Lkt => Some(RE_LKT.is_match(word)), + Language::Oss => Some(RE_OSS.is_match(word)), + Language::Gle => Some(RE_GLE.is_match(word)), + Language::Guz => Some(RE_GUZ.is_match(word)), + Language::Ben => Some(RE_BEN.is_match(word)), + Language::Aka => Some(RE_AKA.is_match(word)), + Language::Haw => Some(RE_HAW.is_match(word)), + Language::Jmc => Some(RE_JMC.is_match(word)), + Language::Mua => Some(RE_MUA.is_match(word)), + Language::Ori => Some(RE_ORI.is_match(word)), + Language::Eng => Some(RE_ENG.is_match(word)), + Language::Lag => Some(RE_LAG.is_match(word)), + Language::Pan => Some(RE_PAN.is_match(word)), + Language::Nus => Some(RE_NUS.is_match(word)), + Language::Fin => Some(RE_FIN.is_match(word)), + Language::Tam => Some(RE_TAM.is_match(word)), + Language::Ksf => Some(RE_KSF.is_match(word)), + Language::Xog => Some(RE_XOG.is_match(word)), + Language::Sun => Some(RE_SUN.is_match(word)), + Language::Guj => Some(RE_GUJ.is_match(word)), + Language::Teo => Some(RE_TEO.is_match(word)), + Language::Iii => Some(RE_III.is_match(word)), + Language::Aze => Some(RE_AZE.is_match(word)), + Language::Bem => Some(RE_BEM.is_match(word)), + Language::Bos => Some(RE_BOS.is_match(word)), + Language::Ccp => Some(RE_CCP.is_match(word)), + Language::Luy => Some(RE_LUY.is_match(word)), + Language::Dyo => Some(RE_DYO.is_match(word)), + Language::Mya => Some(RE_MYA.is_match(word)), + Language::Lit => Some(RE_LIT.is_match(word)), + Language::Mas => Some(RE_MAS.is_match(word)), + Language::Ewo => Some(RE_EWO.is_match(word)), + Language::Mfe => Some(RE_MFE.is_match(word)), + Language::Dua => Some(RE_DUA.is_match(word)), + Language::Mzn => Some(RE_MZN.is_match(word)), + Language::Mgh => Some(RE_MGH.is_match(word)), + Language::Amh => Some(RE_AMH.is_match(word)), + Language::Jav => Some(RE_JAV.is_match(word)), + Language::Prg => Some(RE_PRG.is_match(word)), + Language::Ses => Some(RE_SES.is_match(word)), + Language::Tir => Some(RE_TIR.is_match(word)), + Language::Mlg => Some(RE_MLG.is_match(word)), + Language::Dav => Some(RE_DAV.is_match(word)), + Language::Ind => Some(RE_IND.is_match(word)), + Language::Hun => Some(RE_HUN.is_match(word)), + Language::Ksb => Some(RE_KSB.is_match(word)), + Language::Hsb => Some(RE_HSB.is_match(word)), + Language::Agq => Some(RE_AGQ.is_match(word)), + Language::Kab => Some(RE_KAB.is_match(word)), + Language::Lin => Some(RE_LIN.is_match(word)), + Language::Tuk => Some(RE_TUK.is_match(word)), + Language::Asa => Some(RE_ASA.is_match(word)), + Language::Asm => Some(RE_ASM.is_match(word)), + Language::Ceb => Some(RE_CEB.is_match(word)), + Language::Dsb => Some(RE_DSB.is_match(word)), + Language::Mon => Some(RE_MON.is_match(word)), + Language::Rof => Some(RE_ROF.is_match(word)), + Language::Uzb => Some(RE_UZB.is_match(word)), + Language::Rwk => Some(RE_RWK.is_match(word)), + Language::Chr => Some(RE_CHR.is_match(word)), + Language::Lrc => Some(RE_LRC.is_match(word)), + Language::Cat => Some(RE_CAT.is_match(word)), + Language::Seh => Some(RE_SEH.is_match(word)), + Language::Vol => Some(RE_VOL.is_match(word)), + Language::Tur => Some(RE_TUR.is_match(word)), + Language::Ful => Some(RE_FUL.is_match(word)), + Language::Yue => Some(RE_YUE.is_match(word)), + Language::Fur => Some(RE_FUR.is_match(word)), + Language::Tzm => Some(RE_TZM.is_match(word)), + Language::Kkj => Some(RE_KKJ.is_match(word)), + Language::Msa => Some(RE_MSA.is_match(word)), + Language::Bul => Some(RE_BUL.is_match(word)), + Language::Rus => Some(RE_RUS.is_match(word)), + Language::Vai => Some(RE_VAI.is_match(word)), + Language::Hrv => Some(RE_HRV.is_match(word)), + Language::Yor => Some(RE_YOR.is_match(word)), + Language::Ksh => Some(RE_KSH.is_match(word)), + Language::Sin => Some(RE_SIN.is_match(word)), + Language::Urd => Some(RE_URD.is_match(word)), + Language::Fil => Some(RE_FIL.is_match(word)), + Language::Cgg => Some(RE_CGG.is_match(word)), + Language::Ell => Some(RE_ELL.is_match(word)), + Language::Dan => Some(RE_DAN.is_match(word)), + Language::Zho => Some(RE_ZHO.is_match(word)), + Language::Mer => Some(RE_MER.is_match(word)), + Language::Sna => Some(RE_SNA.is_match(word)), + _ => None, + } + } +} diff --git a/wordlang/src/lib.rs b/wordlang/src/lib.rs new file mode 100644 index 0000000..911f568 --- /dev/null +++ b/wordlang/src/lib.rs @@ -0,0 +1,32 @@ +pub use isolang::Language; + +mod data; + +pub trait LanguageExt { + fn is_match(&self, word: &str) -> Option; +} + +pub fn matches(word: &str) -> Vec { + data::REGEX_SET + .matches(word) + .into_iter() + .map(|idx| data::LANGUAGES[idx]) + .collect::>() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_matches() { + let matches = matches("hello"); + + assert_eq!(matches.len(), 147); + } + + #[test] + fn test_is_match() { + assert_eq!(Language::Swe.is_match("hello"), Some(true)); + } +}