当前位置: 首页 > 知识库问答 >
问题:

如何匹配小写字母和标点符号的选择?

黄兴业
2023-03-14

期望的行为

我有一个输入字段(表单的文本区域),我想允许以下字符:

  • 小写字母
  • 单个空格
  • 单个commma
  • 单撇号
  • 单破折号

基本上,只允许人们在上述限制范围内自由键入文本。

实际行为

我创建的模式根本不捕捉已定义的标点符号,或者不捕捉所需的标点符号:

  • 逗号不匹配

我所尝试的

我利用了以下资源:

https://stackoverflow.com/a/15472787
https://www.regextester.com/104025
https://stackoverflow.com/a/7233549

提出:

图案

var pattern = /^[a-z]+( [a-z,'-]+)*$/gm;

测验

Valid: 

hello
what
how are you
the person's thing
how, are you
dash - between words
how-are-you  
  
Not Valid:   

how are you?
hi5
8ask
yyyy.
! dff
NoSpecialcharacters#
54445566
how    are you
how-are------you
the person''s thing
how,, are you

测试代码

js prettyprint-override">// define an array of tests 
var array_of_tests = ["hello", "what", "how are you", "how are you?", "hi5", "8ask", "yyyy.", "! dff", "NoSpecialcharacters#", "54445566", "how    are you", "how-are-you", "how-are------you", "the person's thing", "the person''s thing", "how, are you", "how,, are you"];

// define the pattern  
var pattern = /^[a-z]+( [a-z,'-]+)*$/gm;

// iterate over the array of tests 
for (let t = 0; t < array_of_tests.length; t++) {

    // create reference to test 
    var test = array_of_tests[t];

    // see if test matches pattern  
    var result = test.match(pattern);

    // log results  
    if (result !== null) {
        console.log("MATCHED");
        console.log(test);
        console.log(result);
    } else {
        console.log("NOT MATCHED");
        console.log(test);
        console.log(result);
    }

    console.log("===============");
}

问题

除了实现所需的行为外,我还想知道:

有没有一种简单的方法可以从正则表达式中添加和删除所需的标点符号?

共有1个答案

上官修文
2023-03-14

要允许小写单词之间有一个相同的分隔符,您可以使用这个正则表达式:

/^(?!.*([ ,'-])\1)[a-z]+(?:[ ,'-]+[a-z]+)*$/gm

正则表达式演示

如果输入连续重复同一分隔符,则负前瞻(?!.*([,'-])\1)将使匹配失败。

 类似资料:
  • 我试图创建一个unicode正则表达式,它匹配每个字符,除了一个字母(任何语言的)和标点符号。 比如字符串 abcd 123 kjd·%/(“?:!”! 应该只匹配下面的粗体部分 abcd 123 kjd·%/(“?:!”! 我知道匹配除字母之外的所有内容,匹配除标点符号之外的所有内容。我如何将这两个正则表达式字符串组合为一个?我已经尝试过简单地将放在一起,但这并没有给出所需的匹配。我也尝试过编写

  • 问题内容: 如何将一个字母字符与一个正则表达式匹配。我想要一个不在但不在的角色。我希望它与unicode兼容,这就是为什么我不能使用。 问题答案: 您的前两个句子相互矛盾。“在但不在”中包括下划线。我假设从您的第三句话开始,您不想下划线。 使用信封背面的维恩图会有所帮助。让我们看看我们不想要的: (1)不匹配的字符(即,不需要字母,数字或下划线的任何内容)=> (2)数字=> (3)下划线=> 所

  • 问题内容: 在Java 6中, 打印i(),但是在Java 7中,它用双点()打印i 。 我知道这是土耳其语字符,但是如何使用此代码使Java 7输出与v6相同的输出? 还要确保该代码可以处理国际文本,而无需对该函数进行硬编码以仅使用土耳其语区域设置。 问题答案: 关于此iLowerCase问题,有一篇非常详细的博客文章 让我尝试总结以下主要部分: 在Java 7中,此方法的确发生了变化,并且与J

  • 为什么下面的正则表达式不匹配连字符(或与号、句号或逗号,尽管我暂时将它们排除在下面的字符类之外)?我在试着匹配字符串... ...(这是单词“hello”的语音表示),并且当字符串中有连字符时,匹配失败(上面列出的与数等相同)。 这种模式... ...起作用,根据regex101.com的说法,它本质上是完全相同的模式,所以我不明白为什么更长的模式不起作用。

  • 问题内容: 我一直在谷歌搜索很多,但没有找到我的问题的答案: 如何使用正则表达式检查字符串是否至少包含以下各项之一: 大写字母 小写字母 数字 特殊字符: !@#$%^&*()-_=+|[{]};:’“,<.>/?` 所以,我至少需要一个大写字母 和 至少一个小写字母 和 至少一个数字 和 至少一个特殊字符。 我敢肯定答案很简单,但是我找不到。任何帮助是极大的赞赏。 问题答案: 尽管我个人会使用M

  • 问题内容: 哟,所以我试图制作一个程序,可以接受用户输入的字符串,例如:“一次一次”,然后报告该字符串包含多少个大写和小写字母: 输出示例:字符串具有8个大写字母,字符串具有5个小写字母,即时消息应该使用字符串类而不是数组,有关如何开始使用此字符串的任何提示?在此先感谢,这是我到目前为止所做的:D! 问题答案: 只需创建发现小写或大写字母时递增的计数器,如下所示: