【问题标题】:Regular expression for no space at start or end, but allow space in middle but also allow only one char inputs正则表达式开始或结束没有空格,但中间允许空格但也只允许一个字符输入
【发布时间】:2021-07-09 21:18:43
【问题描述】:

我的RegExp

/^[A-Za-z ]*$/

那我应该写什么在开始或结束时不允许空格,但在中间允许空格

【问题讨论】:

标签: javascript php


【解决方案1】:

此正则表达式将匹配任何符合原始表达式且开头或结尾没有空格的字符串

^(?! )[A-Za-z ]*(?<! )$

【讨论】:

  • @AD7six,准确来说少于 2 个字符。
  • 已编辑,因此适用于单个字符串
  • @Paolo.Bolzoni 原始正则表达式没有指定需要匹配数字
  • @NambiNarayanan 你在第二行有一个;
  • 好主意使用否定正则表达式,但不需要将字符组用于单个字符组,只需使用:^(?! )[A-Za-z ]*(?&lt;! )$@Tom,您编辑答案并回答我的评论是相当不公平的说明它没有意义。现在它没有,但是在您编写的原始正则表达式中,开始和结束时确实接受了数字。 (是^[^\s][A-Za-z ]*[^\s]$
【解决方案2】:

使用此模式匹配正则表达式

(?=(?:^\w))([A-Za-z ]+)(?<=[^ ])$

演示

http://regex101.com/r/lM1aQ6

我建议你在php中使用trim()去除字符串开头和结尾的空格。

$hello  = " Hello World ";
trim($hello);

来自 PHP 文档

trim — 从字符串的开头和结尾去除空格(或其他字符)

【讨论】:

  • OP 指定他们正在使用正则表达式。
  • 我认为你应该允许空字符串,否则 OP 会使用 + 而不是 *。不过,这听起来相当复杂。
【解决方案3】:

我可能会拆分问题:或者它根本不包含空格,或者它只包含在中间。

^[A-Za-z]*$|^[A-Za-z][A-Za-z ]*[A-Za-z]$

它将接受“aa”、“a”、“a ab c”,但不接受“”或“a”...

【讨论】:

    【解决方案4】:

    我认为你需要这个:

    <?php 
    echo trim("  spaces and spaces    "); // outputs: "spaces and spaces"
    ?>
    

    【讨论】:

    • 我知道,但也许他不知道php中存在trim()函数。
    • @AD7six,你为什么认为trim() 没有回答问题?
    • 问题中的正则表达式是 alpha-only - 使用 trim 你不能强制一个字符范围,例如根据问题,“Ñ”或数字应该失败,并且使用修剪在功能上根本不等效。其他“使用修剪”答案相同。
    • @shankar 你的意思是除了很明显吗? Trim 修改变量,正则表达式只是在它们重叠的非常有限的场景中的模式匹配 ($noLeadingTrailingSpace = trim ($string) === $string;)。
    • @AD7six,OP 将标记一个在开头或结尾没有空格的有效字符串。所以在这种情况下,trim 完全可以完成这项工作。老实说,在这种情况下根本不需要正则表达式。
    【解决方案5】:

    我想它会适合你,

    \b^([^\s]|[a-zA-Z])\s+[a-zA-Z]\b
    

    这里,

    • \b 表示单词边界。
    • ^\s 禁止使用空格。
    • |是一个交替

    感谢分享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多