나는 사용자의 성을 얻을 수있는 텍스트 상자가 있습니다. 정규식에서 대시 (-)를 하나만 허용하려면 어떻게합니까? 한 다음,대시를 허용하는 정규식
Pattern p = Pattern.compile("[^a-z-']", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(name);
나는 사용자의 성을 얻을 수있는 텍스트 상자가 있습니다. 정규식에서 대시 (-)를 하나만 허용하려면 어떻게합니까? 한 다음,대시를 허용하는 정규식
Pattern p = Pattern.compile("[^a-z-']", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(name);
가 무효 값의 조각을 나타냅니다, 당신은 아마도 찾을 Matcher.find()
을 사용하고 의 일부 경우 값이 정규식과 일치합니다. 그 맞습니까? , 또는 시작 두 문자의 순서를 비 레터 비 하이픈 비 - 아포스트로피 문자와 일치하여 (하이픈으로 끝나는 것
Pattern p = Pattern.compile("[^a-zA-Z'-]|-.*-|^-|-$");
: 그렇다면, 당신은 당신의 패턴을 변경할 수 있습니다 두 개의 하이픈을 포함하는 값 검색), 또는 하이픈, 또는 후행 하이픈.
. 감사합니다. –
이 정규식은 하나 이상의 않은 하이픈를 나타내는 단일 하이픈 다음 :이 코드가 처음에 나 문자열 의 끝에 있어야 아니에요 비 - 하이픈. 중간에 하이픈이 백 슬래시로 이스케이프해야하는 경우
^[^\-]+\-[^\-]+$
나는 그건 아마 당신이 정규식을 위해 사용중인 플랫폼에 따라 다릅니다 ... 모르겠어요.
더 많은 regexy 용어로 질문을 다시 말하십시오. "단 한 개의 대시 만 허용하고 처음에는 사용할 수 없습니다."라고 말하면서 "문자열의 시작 부분에 이어 하나 이상의 대시가 뒤따라오고 하나의 대시가 뒤따라오고 대시가 아닌 하나 이상의 대시가 이어집니다. 그 다음에 문자열이 끝납니다. "
[^-]+
-
[^-]+
$
영형. 이 문자열을 전체 문자열과 일치하는 컨텍스트에서 사용하는 경우에는 앵커가 필요하지 않습니다. 나중에 앵커를 사용하는 것이 좋을 수도 있습니다. 문자열 일치 맥락에서 정규식과에 다시 추가하는 것을 잊지.
그것은 당신의 정규식과 같은indexOf()
을 String
에 사용하지 않는 이유는 무엇입니까?
String s = "last-name";
int first = s.indexOf('-');
int last = s.lastIndexOf('-');
if(first == 0 || last == s.length()-1) // Checks if a dash is at the beginning or end
System.out.println("BAD");
if(first != last) // Checks if there is more than one dash
System.out.println("BAD");
정규 표현식을 사용할 때보 다 느리지 만 일반적으로 작은 성의 이름을 사용하면 눈에 잘 띄지 않아야합니다. 또한 디버깅 및 향후 유지 관리가 훨씬 쉬워집니다.
정규 표현식이 훨씬 효율적이기 때문에. –
@PerryMonschau 사실일지도 모르지만,이 경우 문자열이 매우 짧아서 성능상의 이득이 최소화 될 것입니다. 또한이 코드는 정규식보다 요구 사항이 더 명확한 방법입니다 (많은 경우 (때로는 틀린) 정규식 답이 이미 제시되어 있습니다) – dlev
[a-z] - [a-z]과 같은 패턴을 사용해보세요.
패턴 p = 패턴.컴파일 ("[a-z] - [a-z]");
http://regexpal.com에서 regEx를 테스트하십시오. /. – Shailesh
대시가 허용되는 패턴이 아닙니까? 내성에 대시가 없다고 가정 할 때 나는 그렇게 생각할 것이다. – dlev
** 대시 ***가 아닙니다. 그것은 U + 002D, HYPHEN-MINUS 캐릭터입니다! 잊지 마세요 U + 2010 HYPHEN, U + 2011 비 손상 HYPHEN, U + 2012 FIGURE DASH, U + 2013 EN DASH, U + 2014 EM DASH, U + 2015 수평 바, U + 2053 SWUNG DASH, U + 207B SUPERSCRIPT MINUS, U + 208B SUBSCRIPT MINUS, U + 2212 MINUS SIGN, U + 2E3A TWO-EM DASH 및 U + 2E3B THREE-EM DASH. 더있다. – tchrist