不允许开头或结尾有空格的正则表达式,但允许中间有空格,同时也允许只输入一个字符。

3
我的 RegExp 是:
/^[A-Za-z ]*$/

那我应该怎么写才能不允许字符串开头或结尾有空格,但是允许中间的空格呢?


https://dev59.com/J27Xa4cB1Zd3GeqPmBtL - Aamir Afridi
5个回答

8
这个正则表达式将匹配符合原始表达式但开头或结尾没有空格的任何字符串。
^(?! )[A-Za-z ]*(?<! )$

1
@AD7six,准确说应该是少于2个字符。 - Gedrox
已经编辑过,现在可以处理单个字符的字符串。 - Tom Griffin
1
@Paolo.Bolzoni 原始正则表达式没有指定需要匹配数字。 - Tom Griffin
@NambiNarayanan,你在第二行有一个; - Tom Griffin
@Paolo.Bolzoni 对不起,我是 SO 上的新手,不确定编辑答案的礼仪。我是应该保留原始(错误的)答案并添加一个新的吗?我已经按照您的建议进行了编辑,谢谢。 - Tom Griffin
显示剩余3条评论

3
请使用这个模式来在正则表达式中匹配。
(?=(?:^\w))([A-Za-z ]+)(?<=[^ ])$

演示

http://regex101.com/r/lM1aQ6

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

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

来自PHP Doc

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


OP指定他们正在使用正则表达式。 - Tom Griffin
我认为你应该允许空字符串,否则操作者会使用 + 而不是 *。虽然这听起来相当复杂。 - Paolo.Bolzoni

2

我认为这个问题可以分为两种情况:要么字符串中没有空格,要么只有在中间位置才会出现空格。

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

它将接受"aa"、"a"、"a ab c",但不接受" "或"a"…

0

我认为这对你会有帮助,

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

在这里,

  • \b 表示单词边界。
  • ^\s 表示不允许空格。
  • | 表示选择。

感谢分享。


0

我认为你需要这个:

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

2
我知道,但也许他不知道php中trim()函数的存在。 - Cagy79
@AD7six,你为什么认为trim()不能回答这个问题? - Shankar Narayana Damodaran
问题中的正则表达式仅包含字母 - 使用 trim 无法强制执行字符范围,例如 "Ñ" 或数字应根据问题失败,并且使用 trim 简单地不具有功能等效性。另一个“使用 trim”答案也是如此。 - AD7six
@shankar 你的意思是除了显而易见的之外?trim 修改了一个变量,而正则表达式只是在非常有限的情况下进行模式匹配,它们重叠了($noLeadingTrailingSpace = trim ($string) === $string;)。 - AD7six
忽略问题中使用的字符范围,trim 函数并不会标记一个字符串为有效,它使其“有效”,前提是需要 PHP 解决方案,并且该解决方案是合适的,这里并不考虑 JS。除非问题得到澄清,否则我仍然坚持我的第一条评论。 - AD7six
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接