我是regex的新手所以抓住了一个问题,我用Google搜索但不幸的是没有得到解决方案所以我的问题是: 我需要一个正则表达式,它禁止连字符作为第一个字符(如果它是字符串中唯一的字符)
例如: - (禁止)
但是如果我用它写一些数字然后它应该允许它,并且还允许分数值 并且它不应该允许任何字母
例如:
1234(允许)
-1234(允许)
-1234.1234(允许)
整个字符串中不允许使用字母,也不能重复连字符。
这是我到目前为止所尝试的:
((^ - [0-9] {0,4})|?(^ - [0-9] {0,4})?)([0-9] {1,4})。?
除了以外的所有场景都适用 单连字符即
例如: - (允许使用我的正则表达式,但我不应该
)
真的很感激帮助.. :)
答案 0 :(得分:1)
我不知道你的意图是什么。在正则表达式的开头添加否定前瞻,不会仅允许-
^(?!-$)((^-?[0-9]{0,4})|(^-?[0-9]{0,4}))(\.[0-9]{1,4})?$
您可以将上述正则表达式减少为
^(?!-$)(-?[0-9]{0,4})(\.[0-9]{1,4})?$
答案 1 :(得分:1)
答案 2 :(得分:1)
表达式允许单个连字符的原因是第一部分允许连字符没有数字,第二部分是可选的。
重新排列部件,以便您允许一个至少有一个数字而没有分数的数字,或一个数字至少为零的数字:
^-?(([0-9]{1,4})|([0-9]{0,4}\.[0-9]{1,4}))$
演示:
function validate(s) {
var ok = /^-?(([0-9]{1,4})|([0-9]{0,4}\.[0-9]{1,4}))$/.test(s);
// show result in Stackoverflow snippet
document.write(s + ' : ' + (ok ? 'allowed' : 'not allowed') + '<br>');
}
validate('-');
validate('1234');
validate('1234.123');
validate('1234.12345');
validate('12345');
validate('.123');
validate('.12345');
validate('-1234');
validate('-1234.123');
validate('-1234.12345');
validate('-12345');
validate('-.123');
validate('-.12345');
&#13;
答案 3 :(得分:0)
为什么不在没有正则表达式的情况下做到这一点?尝试这样的事情:
var str1 = '-';
var str2 = '-1234';
var str3 = '1234';
var str = str1;
if (str.length == 1 && str == '-')
alert('Not Allowed');
答案 4 :(得分:0)
这听起来像你想要的:
^(?!.*[a-zA-Z])([^-]|.*\d).*
这意味着: