【问题标题】:regex to allow special characters but not leading/trailing white space正则表达式允许特殊字符但不允许前导/尾随空格
【发布时间】:2018-07-24 09:16:02
【问题描述】:

我希望仅在密码输入字段中允许单词之间的所有特殊字符和空格。

如果在字符串的开头、结尾输入空格,则正则表达式会失败

任何有用的 javascript 正则表达式?

我试过 \S 这不接受任何空格,够吗?

我试过 \A\s|\s*\Z ,但无法否定这一点。

【问题讨论】:

  • 如果/\s/ 正则表达式匹配,结果为失败。如果需要匹配不允许空格的字符串,请使用/^\S+$/
  • 阅读Reference - Password Validation可能会让您受益
  • @wiktor-stribiżew 他说允许空格ARE。 OP 希望拒绝具有前导或尾随空格的输入。
  • 如果这不再是重复的,那么您需要解释为什么它不同
  • 只要使用/^\S+(?:\s+\S+)*$/

标签: javascript regex


【解决方案1】:

使用[^\s] 之类的就足够了。

【讨论】:

  • \S[^\s] 相同。
【解决方案2】:

JS RegExp 不支持\A(字符串开头)和\Z(字符串结尾)锚点。 如果您使用/\S/,它将仅匹配字符串内任何位置的任何非空白字符。 如果您使用/^\s|\s*$/,它将匹配开头的空格或结尾的任何0个或多个空格。

你需要

/^\S+(?:\s+\S+)*$/

请参阅regex demo

它将匹配:

  • ^ - 字符串开头
  • \S+ - 1 个或多个非空白字符
  • (?:\s+\S+)* - 出现 0 次或多次
    • \s+ - 1+ 个空格
    • \S+ - 1+ 非空白字符
  • $ - 字符串结束。

JS 演示:

var strs = ['Abc 123 !@#', 'abc123@', '   abc34', ' a ', 'bvc   '];
var rx = /^\S+(?:\s+\S+)*$/;
for (var s of strs) {
  console.log("'"+s+"'", "=>", rx.test(s));
}

【讨论】:

    【解决方案3】:

    我不知道这是否完全没问题,但在你的情况下,我认为这可以更好地应用

    ^((\w)*){1}$

    【讨论】:

    • 这不允许任何特殊字符,并且包含两个完全多余的捕获组和一个冗余量词({1} 是空操作)。
    • 你说得对,我想向@sri 道歉,因为我读到的内容与完成的问题完全相反。下次我会仔细阅读。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多