【问题标题】:Regex Valdation Pattern Required需要正则表达式验证模式
【发布时间】:2020-03-31 06:45:20
【问题描述】:

这里有人可以告诉我有关创建此验证模式的信息吗?

所有句子都以大写字母开头,消息以句号结尾。没有拼写错误。

【问题讨论】:

  • 祝你好运创建一个检测拼写错误的正则表达式。
  • 是的,我一直在寻找这样的模式
  • 没有。 RegEx 可以搜索模式。但是要创建一个“发现”所有拼写错误的模式,就意味着知道所有“有效”的单词(找出所有不是其中之一的单词)。
  • ^[A-Z]\.$ 这将匹配前两个条件,但我们无法对每个单词进行拼写检查:/
  • \M 匹配有拼写错误的单词,\m 匹配没有拼写错误的单词。只是在开玩笑。这很好,但这怎么可能呢?

标签: javascript node.js angular design-patterns


【解决方案1】:

这种方法对于从网络输入的杂乱数据可能并不完全可靠,因为您可能会发现许多示例文本不符合您的严格规则。您的邮件中有外国字母。但这里有一些基本代码:

将文本拆分成句子(使用后向断言):

message = "A test. Not what I wanted."
sentences = message.split(/(?<=\.)\s*/)
                   .map(sentence => sentence.trim())
                   .filter(sentence => sentence)
;
// sentences = ["A test.", "Not what I wanted."]

所有句子都以大写字母开头(加上可选的空格)。如果一个句子缺少句号,那么这个分词器会将两个句子视为一个句子。

is_all_capital = sentences
                 .map(sentence => sentence.match(/^\s*[A-Z]/))
                 .every(str => !!str)  // cast to boolean
;

消息以句号结束(加上可选的空格)

is_end_period = !!message.match(/\.\s*$/);

没有拼写错误。

注意:这可能会中断,因为您的字典不完整,您的文本语料库包含连字符的单词,不包含撇号,或者标记器弄乱了特殊字符或带有数字的单词。

dictionary = fs.readFileSync('dictionary.txt')
               .toLowerCase()
               .split('\n')
               .reduce((store,x) => ({ ...store, [str]: true }), {})
;
message_tokens = [ ...message.toLowerCase().matchAll(/[a-z]([\w-']*\w)*/g) ]
                 .filter(match => !!match)  
                 .map(match => match[0] )
;
// message_tokens = ["a", "test", "not", "what", "i", "wanted"]

is_spellchecked = message_tokens.every(token => !!dictionary[str])

如果您对拼写检查很认真,您可能需要研究特定的拼写检查库

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多