我正在尝试验证js中的用户字符串,其中允许用户输入具有某些限制的字母数字字符。限制是,在该字母数字字符内,只允许用户在字母数字范围内的任何位置使用2位数字(相同或不同)。 几个例子是:
<TextInput
style={{ height: 40, width: "95%", borderColor: 'gray', borderWidth: 2, borderRadius: 20, marginBottom: 20, fontSize: 18 }}
// Adding hint in TextInput using Placeholder option.
placeholder=" Enter Your First Name"
// Making the Under line Transparent.
underlineColorAndroid="transparent"
/>
1aabdjc2jfd
1klajdfjkladf2
35klfjaddf
fadsfadsf23
fadf2lkdjaf3fdf
等
任何想法都可以使用JS Regex来完成吗?
答案 0 :(得分:3)
因此,您要查找的是一个字母字符串,其中最多包含两位数字。
/^[a-zA-Z]*(?:\d[a-zA-Z]*){0,2}$/
第一个[a-zA-Z]*
与初始字母部分(如果有)匹配。
\d[a-zA-Z]*
匹配一个数字,后跟0个或多个字母字符。将其包装在{0,2}
中,则一起来最多可以输入两位数。
如果您要查找的不是两位数,而是正好是两位位,只需将{0,2}
替换为{2}
:
/^[a-zA-Z]*(?:\d[a-zA-Z]*){2}$/
答案 1 :(得分:1)
您可以使用String#match
方法来精确找出字符串包含的位数:
var regex = /\d/g;
function valid(string) {
return string.match(regex).length <= 2;
}
var strings = [
'1aabdjc2jfd',
'1klajdfjkladf2',
'35klfjaddf',
'fadsfadsf23',
'fadf2lkdjaf3fdf',
'dfdf1kjdkf1',
'dfd2f1kjdk1f1',
'df21212d2f1kjdk1f1',
'dfd2f1kjdk434341f1'
];
strings.forEach(str => console.log(str, valid(str)));
答案 2 :(得分:0)
这里的一个选项是只使用否定的超前断言,该断言检查是否有 3 个或多个彼此相邻的数字出现。这是我建议的模式:
^(?!.*[0-9]{3,})[A-Za-z0-9]*$
代码示例:
console.log(/^(?!.*[0-9]{3,})[A-Za-z0-9]*$/.test('1klajdfjkladf2'));
console.log(/^(?!.*[0-9]{3,})[A-Za-z0-9]*$/.test('1klajdfjkladf2333'));
如果我误解了您的要求,而是您检查是否仅出现两个数字,则当所有数字都出现时,存在一个简单得多的模式:
^(?:[A-Za-z]*(?:[0-9]{2})?)*$