允许在字母数字字符中的任意位置最多2位数字javascript正则表达式

时间:2018-08-13 05:55:54

标签: javascript regex

我正在尝试验证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来完成吗?

3 个答案:

答案 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})?)*$

Demo