18

我想要一个正则表达式,它与开头没有空格的字符串匹配。但是中间包含空格的字符串可以匹配。到目前为止,我已经在下面尝试过

[^-\s][a-zA-Z0-9-_\\s]+$

正则表达式可视化

调试演示

上面不允许在开头使用空格,但也不允许在字符串的中间/结尾。请帮我。

4

9 回答 9

18

在您的第二个字符类中,\\s将匹配\ands和 not \s。因此它不匹配空格。你应该在\s那里使用。另外,将连字符移到末尾,否则会在字符类中创建无意的范围:

^[^-\s][a-zA-Z0-9_\s-]+$
于 2013-11-14T09:17:47.613 回答
7

您需要使用此正则表达式:

^[^-\s][\w\s-]+$
  • 使用起始锚点^
  • 无需双重转义\s
  • 同样重要的是使用连字符作为字符类中的第一个或最后一个字符。
  • \w[a-zA-Z0-9_]
于 2013-11-14T09:17:54.740 回答
7

如果您打算匹配与您的模式匹配且不以空格开头的任意长度的字符串(甚至是空字符串),请之后(?!\s)使用^

/^(?!\s)[a-zA-Z0-9_\s-]*$/
  ^^^^^^

或者,请记住,[A-Za-z0-9_]在 JS 正则表达式中等于\w

/^(?!\s)[\w\s-]*$/

(?!\s)是一个否定的前瞻,它匹配字符串中没有紧跟空格(与\s模式匹配)的位置。

如果您想在字符串开头添加更多“禁止”字符(看起来您也不允许-)继续使用[\s-]前瞻中的字符类:

/^(?![\s-])[\w\s-]*$/

要匹配至少 1 个字符,请替换*+

/^(?![\s-])[\w\s-]+$/

请参阅正则表达式演示。JS 演示:

console.log(/^(?![\s-])[\w\s-]+$/.test("abc   def 123 ___ -loc-   "));
console.log(/^(?![\s-])[\w\s-]+$/.test("  abc   def 123 ___ -loc-   "));

于 2020-01-07T10:43:31.033 回答
6

在开头使用 \S

^\S+[a-zA-Z0-9-_\\s]+$
于 2013-11-14T09:20:19.423 回答
3

此 RegEx 将不允许开头或结尾处的空格。您的字符串/单词并允许所有特殊字符。

^[^\s].+[^\s]$

这个正则表达式也可以正常工作

^[^\s]+(\s+[^\s]+)*$
于 2019-01-31T06:15:56.440 回答
1

/^[^.\s]/

  • 试试这个,它不会允许用户首先输入字符
  • ^ 匹配字符串第一个字符之前的位置
  • . 匹配单个字符。不管是什么字符,除了换行符
  • \s 是空格
于 2019-08-15T15:29:58.553 回答
1

试试这个应该可以

[a-zA-Z0-9_]+.*$
于 2018-02-06T11:26:35.373 回答
0

我建议下面的正则表达式,

^[^\s].*[^\s]$

你可以在这里尝试正则表达式

于 2021-07-07T14:33:10.437 回答
0

如果您的用户名字段仅接受字母和中间空格但不接受开头和结尾

用户名: /^[^\s][a-zA-Z\s]+[^\s]$/

如果您的用户 ID 字段仅接受字母、数字和下划线且不允许有空格

用户身份: /^[\w]+$/

如果您的密码字段只接受字母、数字和特殊字符,则不允许有空格

密码: /^[\w@#&]+$/

注意:\w内容a-zA-Z, number, 下划线 ( _) 如果添加更多字符,请在 . 之后添加特殊字符\w

您可以与密码字段中的用户 ID 和密码字段进行比较,我只添加一些特殊字符 ( @#&)。

印度公众喜欢

于 2020-12-04T15:19:43.937 回答