我需要屏蔽电话号码。它可能包含数字,+(国家代码)和破折号。国家/地区代码可能包含1位或更多位数字。我创建了这种正则表达式来掩盖除了最后4位之外的所有数字:
inputPhoneNum.replaceAll("\\d(?=\\d{4})", "*");
对于此类输入: +13334445678
我得到了这个结果: + ******* 5678
但是,它不适用于此类输入: + 1-333-444-5678 特别是,它返回的数字相同,没有任何变化。虽然所需的输出屏蔽了除最后4位以外的所有数字,加号和短划线。 这就是为什么我想知道如何改变我的正则表达式以包括短划线?我将不胜感激任何帮助!
答案 0 :(得分:7)
使用此正则表达式进行搜索:
.(?=.{4})
区别在于.
将匹配任何字符,而不仅仅是正则表达式中的数字。
Java代码:
inputPhoneNum = inputPhoneNum.replaceAll(".(?=.{4})", "*");
但是,如果您的目的是掩盖最后4位数之前的所有数字,请使用:
.(?=(?:\D*\d){4})
或者在Java中:
inputPhoneNum = inputPhoneNum.replaceAll("\\d(?=(?:\\D*\\d){4})", "*");
(?=(?:\\D*\\d){4})
是一个积极的先行者,断言至少存在4位数,可以用0或更多的非数字分隔。
答案 1 :(得分:2)
我在RegEx中表现不佳,但我认为你应该通过摆脱-
出现来规范电话号码:
inputPhoneNum = inputPhoneNum.replace("-","").replaceAll("\\d(?=\\d{4})", "*");
答案 2 :(得分:1)
尝试使用两个替换所有非数字或+替换为空然后使用你的正则表达式:
renderInput({ input, label, type, meta: { touched, error, warning } }) {
const renderIcon = (input.name === "card" || input.name=== "date" || input.name === "csv" || input.name === "name")
return (
<Item error={error && touched} style={styles.item}>
{
renderIcon &&
<Icon style={styles.icon} active name={input.name === "card" ? "card" : input.name=== "date" ? "calendar": input.name === "csv" ? "unlock" : input.name === "name" ?"contact":undefined} />
}
<Input style={styles.input}
ref={c => (this.textInput = c)}
placeholder={input.name === "card" ? "Card Number": input.name==="date"?"MM":input.name==="date2"?"YY":input.name==="csv"?"CSV": "Name"}
placeholderTextColor="#0dc49d"
secureTextEntry={input.name === "csv" ? true : false}
{...input}
/>
</Item>
);
}
输出
"+1-333-444-5678".replaceAll("[^\\d\\+]", "").replaceAll("\\d(?=\\d{4})", "*");
答案 3 :(得分:0)
答案 4 :(得分:0)
如果您不想使用regex
,则另一种解决方案是使用String
从StringBuilder
循环到*
开始,然后追加前4位数字,然后追加public static String lastFour(String s) {
StringBuilder lastFour = new StringBuilder();
int check = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (Character.isDigit(s.charAt(i))) {
check++;
}
if (check <= 4) {
lastFour.append(s.charAt(i));
} else {
lastFour.append(Character.isDigit(s.charAt(i)) ? "*" : s.charAt(i));
}
}
return lastFour.reverse().toString();
}
(并且正常添加任何非数字字符)
{{1}}
答案 5 :(得分:0)
这就是我使用的方法,可能会有用,只是将提供的数字中的一些数字掩盖
import {WebcamImage} from 'ngx-webcam';
import {Subject, Observable} from 'rxjs';
...
export class AppComponent {
...
// latest snapshot
public webcamImage: WebcamImage = null;
// webcam snapshot trigger
private trigger: Subject<void> = new Subject<void>();
triggerSnapshot(): void {
this.trigger.next();
}
handleImage(webcamImage: WebcamImage): void {
console.info('received webcam image', webcamImage);
this.webcamImage = webcamImage;
}
public get triggerObservable(): Observable<void> {
return this.trigger.asObservable();
}
}