【问题标题】:Regex with predefined start and end pattern具有预定义开始和结束模式的正则表达式
【发布时间】:2016-05-26 08:13:07
【问题描述】:

我的正则表达式模式必须以 /* 开头并且必须以 */ 结尾;在这之间,它可能包含所有字母、数字、特殊字符 - 零次或多次。

我为此做了以下正则表达式:

 [/*][a-zA-Z0-9~@#\^\$&\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*[*/;]

但此表达式不会显示以下模式的错误:

  1. /*
  2. / * sdfsdff
  3. /* sdfsfeff *
  4. /* fefef3323 */

这是错误的。它必须以 /* 开头并以 */ 结尾;不惜一切代价。

以下是用于测试此模式的 Angular 代码。请有人帮忙!

代码:

<html>

<head>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js" ></script> 
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular-messages.min.js"></script> 
</head>

<body ng-app="myApp" ng-controller="myCtrl">

<form name="form1" novalidate>
    {{form1.age.$error}}
    <input type="text" name="age" ng-model="myAge" ng-pattern="/^[/*][a-zA-Z0-9~@#\^\$&\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*[*/;]$/" />
    <div ng-messages="form1.age.$error" >
        <span ng-message="pattern">This field has wrong pattern.</span>
    </div>
</form> 

<script>
//module declaration
var app = angular.module("myApp",['ngMessages']);
//controller declaration
app.controller('myCtrl',function($scope){
    //code goes here ... 
});
</script> 

</body>

</html>

参考:

Regular expression include and exclude special characters

http://www.regular-expressions.info/repeat.html

【问题讨论】:

  • 从开头和结尾删除字符类
  • [/][*][a-zA-Z0-9~@#\^\$&amp;\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*[*][/][;]
  • 尝试regexr.com 编写您的正则表达式
  • @rock321987 这很好,但会在多行上中断

标签: javascript angularjs regex ng-messages


【解决方案1】:

括号表示任何包含的字符。因此,将您的正则表达式更改为:

\/\*[a-zA-Z0-9~@#\^\$&\*\(\)-_\+=\[\]\{\}\|\\,\.\?\s]*\*\/;

您可以阅读Regex charclass


旁注:

  • 您无需在类中转义.?()*{}
  • a-zA-Z0-9_ 等价于 \w。
  • 在 char 类中,- 表示范围,因此 \)-_ 表示从 ) 到 _

我会写:

\/\*[-\w~@#^$&*()+=\[\]{}|\\,.?\s]*\*\/;

或者,如果你想捕捉 任何东西(甚至是多行 cmets):

\/\*[\w\W]*?\*\/;

demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多