使用正则表达式防止前导空格

4

我正在尝试使用以下正则表达式限制评论发布文本:

^([a-zA-Z0-9 _\.\'\"\(\)\!\?\&\@]){1,}$

然而,文本本身需要包含空格' ',但我不想让第一句话有空格,即文章不能有前导空格。例如,(在以下示例中,我将使用'_'代表' ')表单将允许: This is a sentence. 但是它不允许:
(使用'_'代表' ') _This is a sentence __This is a sentence 等等。
我试图使用否定词,但我只是不太理解如何做这个正则表达式。整个字段对我来说都不太适合,所以希望有人能帮忙。谢谢!
注意:我需要用正则表达式来进行实时验证,告诉用户输入是否有效/无效。如果您有更好的想法,则可以提供满足我的要求的其他选项。
3个回答

13

您还可以使用负向前瞻

^(?!\s)([a-zA-Z0-9 _.'"()!?&@]){1,}$

+1 啊,又忘记了前瞻... ;) (字符组中的字符无需转义)。 - Felix Kling

1

如果你只想允许这些字符,但第一个字符不能是空格,你需要重复字符组:

/^[a-zA-Z0-9 _.'"()!?&@][a-zA-Z0-9 _.'"()!?&@\s]+$/

或者你可以进行两个测试:

if(!/^\s/.test(str) && /^[a-zA-Z0-9 _.'"()!?&@]+$/.test(str)) {
    // valid
}

这只能防止一个实例的' ',我如何扩展以防止理论上无限数量的实例? - Matt
@Matt:你是在说第一个表达式还是第二个表达式?如果第一个字符不是空格,那么一切都没问题,对吧? - Felix Kling
不,我需要文本之前没有任何空格。这就是为什么我展示了上面的例子,即使有2个空格也无法工作。 - Matt
@Matt:我认为你把问题复杂化了。无论开头有多少个空格,第一个字符总是唯一的。因此,只需测试第一个字符即可。如果它不是空格,则是字母,因此没有前导空格。但实际上我不确定你如何应用表达式,所以可能我漏掉了什么。 - Felix Kling

0

只需要在你的正则表达式开头使用^\S,其中'^'表示字符串的开头,'\S'是空白字符类的否定。


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