我需要匹配正则表达式,以允许它在开头用+(仅一个加号)符号开头,然后只允许数字。
这是我的指示:
public class Base
{
private Base()
{
}
public string Name { get; set; }
}
public class Derived : Base
{
public Derived(string name)
{
base.Name = name;
}
}
HTML:
(function(app) {
'use strict';
var plusOnly = function() {
return {
require: 'ngModel',
restrict: 'A',
link: function(scope, element, attr, ctrl) {
function inputValue(value) {
if (value) {
var digitsPlus = value.replace(/^\+[0-9]+/g, '');
if (digitsPlus !== value) {
ctrl.$setViewValue(digitsPlus);
ctrl.$render();
}
return parseInt(digitsPlus, 10);
}
return undefined;
}
ctrl.$parsers.push(inputValue);
}
};
};
app.directive('plusOnly', [plusOnly]);
})(angular.module('App'));
虽然这限制了数字和+但它仍然允许我有多个优点。
我在哪里犯了错误?
感谢。
答案 0 :(得分:2)
你只需要将+限制为只有一个,如下所示:
^\+{1}[0-9]+$
测试here
修改强>
因为您的代码逻辑存在问题...如果我理解正确,您希望删除除正则表达式匹配的内容之外的所有内容。事实上,你想要regex.Match
的反面。在这种情况下,你需要消极的前瞻,如下所示:
首先,检查输入是否有效,然后,如果是,则替换值...
var match = value.match(/^\+{1}[0-9]+$/g);
if (match !== null) {
//now replace values using negative lookahead...
var digitsPlus = value.replace(/^(?!\+{1}[0-9]+)$/g, '');
//some other code
这可能是您问题的答案。
答案 1 :(得分:1)
你的正则表达式是正确的。
您的功能存在逻辑问题。
您正在获取输入值,(无论它是什么),您将使用空字符串替换输入值+12321(任何数字),例如:
+ 43432abc您将替换为abc。
但你应该反过来。
我建议做这样的事情:
var digitsPlus = value.replace(/^.*?([\+0-9]?[0-9]+)?.*?$/, '$1');