【问题标题】:Pattern regex inclusion special characters模式正则表达式包含特殊字符
【发布时间】:2016-06-05 18:33:35
【问题描述】:

我有这条线

pattern = "\S*\w+(\s?$|\s{1,}\w+)+" 

这一切都很好,因为它允许我阻止初始空格,并允许单词之间的空格,但我不能在不更改此属性的情况下包含特殊字符(例如:'+' &%)。有人可以帮我吗 ?谢谢

【问题讨论】:

  • 这是 HTML5 pattern 属性,还是字符串值 pattern JavaScript 变量?
  • 为什么最后只允许\w而不是\S
  • html5 是一种模式,但也可以替代 JavaScript。在最后一部分 .. \w +) + 我允许能够编写由空格分隔的单词,例如:“hello my name is”,并且首字母 \S * 阻止前导空格。我正在寻找一个完整的解决方案,甚至允许特殊字符
  • 你可以像var found = str[0] == " " ? str.trimLeft() : str一样做

标签: regex html


【解决方案1】:

如果你想要的只是空间分割,你应该用\S替换\w

无论如何,\S*\w+ 有点多余,您可以使用\S*\w 进行简化。

但是,如果您想要更好地控制,为什么不写出整个范围并将\w 替换为[a-zA-Z0-9_+&%]

Check out regular expressions for javascript

【讨论】:

    【解决方案2】:

    \S 匹配特殊字符,\w 仅匹配[a-zA-Z0-9_]

    所以你可以简单地将它们替换为

    pattern="\S*\S+(\s?$|\s{1,}\S+)+"
    

    但是有很多冗余。将其简化为

    pattern="\S+(\s+\S+)*\s?"
    

    或者如果你真的唯一关心的是从\S 开始,那么就这样做

    pattern="\S[\s\S]*" <!-- or -->
    pattern="\S.*" <!-- not allowing linebreaks -->
    

    【讨论】:

    • 谢谢,这是一个很好的替代解决方案,结合“必需”输入字段不为空
    【解决方案3】:

    根据我的理解,如果您希望它找不到空格或特殊字符,只需删除 \S* 这匹配任何其他内容,然后是包含特殊字符的空格。

    \w+(\s?$|\s{1,}\w+)+

    这意味着它将阻止正则表达式开头的空格和特殊字符,但是单词之间的特殊字符将被忽略。为此,对于非单词字符,我将用 \W 替换 \s。这将允许单词之间有空格和特殊字符。

    \w+(\W?$|\W{1,}\w+)+
    

    一个测试正则表达式的好网站,我能够确认这是regex101.com 这是一个您可以在键入正则表达式时测试正则表达式的地方,其中包含显示您的正则表达式在您键入时会做什么的详细信息。您还可以包含示例文本以查看您的正则表达式将在文本中找到什么。上面给出的正则表达式:“!Test”只捕获了测试并忽略了!以及Test之前的空格。

    【讨论】:

    • 第二种解决方案是我一直在寻找的,我返回非常有用,但我发现他们不能以特殊字符开头,例如:('hello) 并且不要当您有多个字符时工作,例如:(hello '+ )。如何建模我的表情?谢谢
    • 那么你只想要第一个特殊字符还是多个?
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多