用Regex验证规则句子语法


Validating Regular Sentence Grammar with Regex

所以我想根据它是否只包含语法字符以及数字和字母来验证字符串。(基本上是A-Z, A-Z, 0-9,加上句号(.),逗号(,),冒号(:),分号(;),连字符(-),单引号('),双引号(")和圆括号()。我得到一个PHP错误,说"编译失败:范围无序的字符类"。我应该使用什么正则表达式代码?

这是我目前使用的一个:^[a-zA-Z0-9_:;-()''" ]*^

你需要转义-,然后变成这个^[a-zA-Z0-9_:;'-()''" ]*-在字符集内具有特殊的含义,需要进行转义。最后^也是没有必要的。regex也可以使用'w简化,如下所示

^['w:;()'"'s-]*

'w匹配字母、数字和下划线

问题是正则表达式中有一个破折号字符,解析器将其解释为一个范围,而不是一个文字破折号。您可以通过以下命令修复:

  • 用反斜杠转义(^[a-zA-Z0-9_:;'-()''" ]*^)
  • 把它放在开始位置(^[-a-zA-Z0-9_:;()''" ]*^)
  • 把它放在最后(^[a-zA-Z0-9_:;()''" -]*^)